| 108 | } |
| 109 | |
| 110 | func (e *Encoder) encodeZeroValue(vp valueProvider, rv reflect.Value) error { |
| 111 | switch rv.Kind() { |
| 112 | case reflect.Invalid: |
| 113 | vp.GetValue().Null() |
| 114 | case reflect.Array: |
| 115 | vp.GetValue().Array().Close() |
| 116 | case reflect.Map, reflect.Slice: |
| 117 | vp.GetValue().Null() |
| 118 | case reflect.String: |
| 119 | vp.GetValue().String("") |
| 120 | case reflect.Bool: |
| 121 | vp.GetValue().Boolean(false) |
| 122 | case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: |
| 123 | vp.GetValue().Long(0) |
| 124 | case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: |
| 125 | vp.GetValue().ULong(0) |
| 126 | case reflect.Float32, reflect.Float64: |
| 127 | vp.GetValue().Double(0) |
| 128 | case reflect.Interface, reflect.Ptr: |
| 129 | vp.GetValue().Null() |
| 130 | default: |
| 131 | return &document.InvalidMarshalError{Message: fmt.Sprintf("unknown value type: %s", rv.String())} |
| 132 | } |
| 133 | |
| 134 | return nil |
| 135 | } |
| 136 | |
| 137 | func (e *Encoder) encodeStruct(vp valueProvider, rv reflect.Value) error { |
| 138 | if rv.CanInterface() && document.IsNoSerde(rv.Interface()) { |