diff options
Diffstat (limited to 'vendor/github.com/francoispqt/gojay/encode_interface.go')
-rw-r--r-- | vendor/github.com/francoispqt/gojay/encode_interface.go | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/vendor/github.com/francoispqt/gojay/encode_interface.go b/vendor/github.com/francoispqt/gojay/encode_interface.go new file mode 100644 index 00000000..c4692e5f --- /dev/null +++ b/vendor/github.com/francoispqt/gojay/encode_interface.go @@ -0,0 +1,173 @@ +package gojay + +import ( + "fmt" +) + +// Encode encodes a value to JSON. +// +// If Encode cannot find a way to encode the type to JSON +// it will return an InvalidMarshalError. +func (enc *Encoder) Encode(v interface{}) error { + if enc.isPooled == 1 { + panic(InvalidUsagePooledEncoderError("Invalid usage of pooled encoder")) + } + switch vt := v.(type) { + case string: + return enc.EncodeString(vt) + case bool: + return enc.EncodeBool(vt) + case MarshalerJSONArray: + return enc.EncodeArray(vt) + case MarshalerJSONObject: + return enc.EncodeObject(vt) + case int: + return enc.EncodeInt(vt) + case int64: + return enc.EncodeInt64(vt) + case int32: + return enc.EncodeInt(int(vt)) + case int8: + return enc.EncodeInt(int(vt)) + case uint64: + return enc.EncodeUint64(vt) + case uint32: + return enc.EncodeInt(int(vt)) + case uint16: + return enc.EncodeInt(int(vt)) + case uint8: + return enc.EncodeInt(int(vt)) + case float64: + return enc.EncodeFloat(vt) + case float32: + return enc.EncodeFloat32(vt) + case *EmbeddedJSON: + return enc.EncodeEmbeddedJSON(vt) + default: + return InvalidMarshalError(fmt.Sprintf(invalidMarshalErrorMsg, vt)) + } +} + +// AddInterface adds an interface{} to be encoded, must be used inside a slice or array encoding (does not encode a key) +func (enc *Encoder) AddInterface(value interface{}) { + switch vt := value.(type) { + case string: + enc.AddString(vt) + case bool: + enc.AddBool(vt) + case MarshalerJSONArray: + enc.AddArray(vt) + case MarshalerJSONObject: + enc.AddObject(vt) + case int: + enc.AddInt(vt) + case int64: + enc.AddInt(int(vt)) + case int32: + enc.AddInt(int(vt)) + case int8: + enc.AddInt(int(vt)) + case uint64: + enc.AddUint64(vt) + case uint32: + enc.AddInt(int(vt)) + case uint16: + enc.AddInt(int(vt)) + case uint8: + enc.AddInt(int(vt)) + case float64: + enc.AddFloat(vt) + case float32: + enc.AddFloat32(vt) + default: + if vt != nil { + enc.err = InvalidMarshalError(fmt.Sprintf(invalidMarshalErrorMsg, vt)) + return + } + return + } +} + +// AddInterfaceKey adds an interface{} to be encoded, must be used inside an object as it will encode a key +func (enc *Encoder) AddInterfaceKey(key string, value interface{}) { + switch vt := value.(type) { + case string: + enc.AddStringKey(key, vt) + case bool: + enc.AddBoolKey(key, vt) + case MarshalerJSONArray: + enc.AddArrayKey(key, vt) + case MarshalerJSONObject: + enc.AddObjectKey(key, vt) + case int: + enc.AddIntKey(key, vt) + case int64: + enc.AddIntKey(key, int(vt)) + case int32: + enc.AddIntKey(key, int(vt)) + case int16: + enc.AddIntKey(key, int(vt)) + case int8: + enc.AddIntKey(key, int(vt)) + case uint64: + enc.AddIntKey(key, int(vt)) + case uint32: + enc.AddIntKey(key, int(vt)) + case uint16: + enc.AddIntKey(key, int(vt)) + case uint8: + enc.AddIntKey(key, int(vt)) + case float64: + enc.AddFloatKey(key, vt) + case float32: + enc.AddFloat32Key(key, vt) + default: + if vt != nil { + enc.err = InvalidMarshalError(fmt.Sprintf(invalidMarshalErrorMsg, vt)) + return + } + return + } +} + +// AddInterfaceKeyOmitEmpty adds an interface{} to be encoded, must be used inside an object as it will encode a key +func (enc *Encoder) AddInterfaceKeyOmitEmpty(key string, v interface{}) { + switch vt := v.(type) { + case string: + enc.AddStringKeyOmitEmpty(key, vt) + case bool: + enc.AddBoolKeyOmitEmpty(key, vt) + case MarshalerJSONArray: + enc.AddArrayKeyOmitEmpty(key, vt) + case MarshalerJSONObject: + enc.AddObjectKeyOmitEmpty(key, vt) + case int: + enc.AddIntKeyOmitEmpty(key, vt) + case int64: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case int32: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case int16: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case int8: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case uint64: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case uint32: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case uint16: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case uint8: + enc.AddIntKeyOmitEmpty(key, int(vt)) + case float64: + enc.AddFloatKeyOmitEmpty(key, vt) + case float32: + enc.AddFloat32KeyOmitEmpty(key, vt) + default: + if vt != nil { + enc.err = InvalidMarshalError(fmt.Sprintf(invalidMarshalErrorMsg, vt)) + return + } + return + } +} |