(cv cbor.Value, rv reflect.Value, tag serde.Tag)
| 55 | } |
| 56 | |
| 57 | func (d *decoder) decode(cv cbor.Value, rv reflect.Value, tag serde.Tag) error { |
| 58 | if _, ok := cv.(*cbor.Nil); ok { |
| 59 | return d.decodeNil(serde.Indirect(rv, true)) |
| 60 | } |
| 61 | |
| 62 | rv = serde.Indirect(rv, false) |
| 63 | if err := d.unsupportedType(rv); err != nil { |
| 64 | return err |
| 65 | } |
| 66 | |
| 67 | switch v := cv.(type) { |
| 68 | case cbor.Uint, cbor.NegInt: |
| 69 | return d.decodeInt(v, rv) |
| 70 | case cbor.Float64: |
| 71 | return d.decodeFloat(float64(v), rv) |
| 72 | case cbor.String: |
| 73 | return d.decodeString(string(v), rv) |
| 74 | case cbor.Bool: |
| 75 | return d.decodeBool(bool(v), rv) |
| 76 | case cbor.List: |
| 77 | return d.decodeList(v, rv) |
| 78 | case cbor.Map: |
| 79 | return d.decodeMap(v, rv) |
| 80 | case *cbor.Tag: |
| 81 | return d.decodeTag(v, rv) |
| 82 | default: |
| 83 | return fmt.Errorf("unsupported cbor document type %T", v) |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | func (d *decoder) decodeInt(v cbor.Value, rv reflect.Value) error { |
| 88 | switch rv.Kind() { |
no test coverage detected