| 74 | } |
| 75 | |
| 76 | func (e *encoder) encodeZeroValue(rv reflect.Value) (cbor.Value, error) { |
| 77 | switch rv.Kind() { |
| 78 | case reflect.Array: |
| 79 | return cbor.List{}, nil |
| 80 | case reflect.String: |
| 81 | return cbor.String(""), nil |
| 82 | case reflect.Bool: |
| 83 | return cbor.Bool(false), nil |
| 84 | case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: |
| 85 | return cbor.EncodeFixedUint(0), nil |
| 86 | case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: |
| 87 | return cbor.EncodeFixedUint(0), nil |
| 88 | case reflect.Float32, reflect.Float64: |
| 89 | return cbor.Float64(0), nil |
| 90 | case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: |
| 91 | return &cbor.Nil{}, nil |
| 92 | default: |
| 93 | return nil, &document.InvalidMarshalError{Message: fmt.Sprintf("unknown value type: %s", rv.String())} |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | func (e *encoder) encodeStruct(rv reflect.Value) (cbor.Value, error) { |
| 98 | if rv.CanInterface() && document.IsNoSerde(rv.Interface()) { |