(vp valueProvider, rv reflect.Value)
| 226 | } |
| 227 | |
| 228 | func (e *Encoder) encodeScalar(vp valueProvider, rv reflect.Value) error { |
| 229 | if rv.Type() == serde.ReflectTypeOf.DocumentNumber { |
| 230 | number := rv.Interface().(document.Number) |
| 231 | if !isValidJSONNumber(number.String()) { |
| 232 | return &document.InvalidMarshalError{Message: fmt.Sprintf("invalid number literal: %s", number)} |
| 233 | } |
| 234 | vp.GetValue().Write([]byte(number)) |
| 235 | } |
| 236 | |
| 237 | switch rv.Kind() { |
| 238 | case reflect.Bool: |
| 239 | vp.GetValue().Boolean(rv.Bool()) |
| 240 | case reflect.String: |
| 241 | vp.GetValue().String(rv.String()) |
| 242 | default: |
| 243 | // Fallback to encoding numbers, will return invalid type if not supported |
| 244 | err := e.encodeNumber(vp, rv) |
| 245 | if err != nil { |
| 246 | return err |
| 247 | } |
| 248 | } |
| 249 | |
| 250 | return nil |
| 251 | } |
| 252 | |
| 253 | func (e *Encoder) encodeNumber(vp valueProvider, rv reflect.Value) error { |
| 254 | switch rv.Kind() { |
no test coverage detected