summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/francoispqt/gojay/encode_interface.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/francoispqt/gojay/encode_interface.go')
-rw-r--r--vendor/github.com/francoispqt/gojay/encode_interface.go173
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
+ }
+}