package gojay
var objKeyStr = []byte (`":"` )
var objKeyObj = []byte (`":{` )
var objKeyArr = []byte (`":[` )
var objKey = []byte (`":` )
func (enc *Encoder ) EncodeObject (v MarshalerJSONObject ) error {
if enc .isPooled == 1 {
panic (InvalidUsagePooledEncoderError ("Invalid usage of pooled encoder" ))
}
_ , err := enc .encodeObject (v )
if err != nil {
enc .err = err
return err
}
_, err = enc .Write ()
if err != nil {
enc .err = err
return err
}
return nil
}
func (enc *Encoder ) EncodeObjectKeys (v MarshalerJSONObject , keys []string ) error {
if enc .isPooled == 1 {
panic (InvalidUsagePooledEncoderError ("Invalid usage of pooled encoder" ))
}
enc .hasKeys = true
enc .keys = keys
_ , err := enc .encodeObject (v )
if err != nil {
enc .err = err
return err
}
_, err = enc .Write ()
if err != nil {
enc .err = err
return err
}
return nil
}
func (enc *Encoder ) encodeObject (v MarshalerJSONObject ) ([]byte , error ) {
enc .grow (512 )
enc .writeByte ('{' )
if !v .IsNil () {
v .MarshalJSONObject (enc )
}
if enc .hasKeys {
enc .hasKeys = false
enc .keys = nil
}
enc .writeByte ('}' )
return enc .buf , enc .err
}
func (enc *Encoder ) AddObject (v MarshalerJSONObject ) {
enc .Object (v )
}
func (enc *Encoder ) AddObjectOmitEmpty (v MarshalerJSONObject ) {
enc .ObjectOmitEmpty (v )
}
func (enc *Encoder ) AddObjectNullEmpty (v MarshalerJSONObject ) {
enc .ObjectNullEmpty (v )
}
func (enc *Encoder ) AddObjectKey (key string , v MarshalerJSONObject ) {
enc .ObjectKey (key , v )
}
func (enc *Encoder ) AddObjectKeyOmitEmpty (key string , v MarshalerJSONObject ) {
enc .ObjectKeyOmitEmpty (key , v )
}
func (enc *Encoder ) AddObjectKeyNullEmpty (key string , v MarshalerJSONObject ) {
enc .ObjectKeyNullEmpty (key , v )
}
func (enc *Encoder ) Object (v MarshalerJSONObject ) {
if v .IsNil () {
enc .grow (2 )
r := enc .getPreviousRune ()
if r != '{' && r != '[' {
enc .writeByte (',' )
}
enc .writeByte ('{' )
enc .writeByte ('}' )
return
}
enc .grow (4 )
r := enc .getPreviousRune ()
if r != '[' {
enc .writeByte (',' )
}
enc .writeByte ('{' )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectWithKeys (v MarshalerJSONObject , keys []string ) {
if v .IsNil () {
enc .grow (2 )
r := enc .getPreviousRune ()
if r != '{' && r != '[' {
enc .writeByte (',' )
}
enc .writeByte ('{' )
enc .writeByte ('}' )
return
}
enc .grow (4 )
r := enc .getPreviousRune ()
if r != '[' {
enc .writeByte (',' )
}
enc .writeByte ('{' )
var origKeys = enc .keys
var origHasKeys = enc .hasKeys
enc .hasKeys = true
enc .keys = keys
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectOmitEmpty (v MarshalerJSONObject ) {
if v .IsNil () {
return
}
enc .grow (2 )
r := enc .getPreviousRune ()
if r != '[' {
enc .writeByte (',' )
}
enc .writeByte ('{' )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectNullEmpty (v MarshalerJSONObject ) {
enc .grow (2 )
r := enc .getPreviousRune ()
if r != '[' {
enc .writeByte (',' )
}
if v .IsNil () {
enc .writeBytes (nullBytes )
return
}
enc .writeByte ('{' )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectKey (key string , v MarshalerJSONObject ) {
if enc .hasKeys {
if !enc .keyExists (key ) {
return
}
}
if v .IsNil () {
enc .grow (2 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKeyObj )
enc .writeByte ('}' )
return
}
enc .grow (5 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKeyObj )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectKeyWithKeys (key string , value MarshalerJSONObject , keys []string ) {
if enc .hasKeys {
if !enc .keyExists (key ) {
return
}
}
if value .IsNil () {
enc .grow (2 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKeyObj )
enc .writeByte ('}' )
return
}
enc .grow (5 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKeyObj )
var origKeys = enc .keys
var origHasKeys = enc .hasKeys
enc .hasKeys = true
enc .keys = keys
value .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectKeyOmitEmpty (key string , v MarshalerJSONObject ) {
if enc .hasKeys {
if !enc .keyExists (key ) {
return
}
}
if v .IsNil () {
return
}
enc .grow (5 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKeyObj )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
func (enc *Encoder ) ObjectKeyNullEmpty (key string , v MarshalerJSONObject ) {
if enc .hasKeys {
if !enc .keyExists (key ) {
return
}
}
enc .grow (5 + len (key ))
r := enc .getPreviousRune ()
if r != '{' {
enc .writeByte (',' )
}
enc .writeByte ('"' )
enc .writeStringEscape (key )
enc .writeBytes (objKey )
if v .IsNil () {
enc .writeBytes (nullBytes )
return
}
enc .writeByte ('{' )
var origHasKeys = enc .hasKeys
var origKeys = enc .keys
enc .hasKeys = false
enc .keys = nil
v .MarshalJSONObject (enc )
enc .hasKeys = origHasKeys
enc .keys = origKeys
enc .writeByte ('}' )
}
type EncodeObjectFunc func (*Encoder )
func (f EncodeObjectFunc ) MarshalJSONObject (enc *Encoder ) {
f (enc )
}
func (f EncodeObjectFunc ) IsNil () bool {
return f == nil
}
func (enc *Encoder ) keyExists (k string ) bool {
if enc .keys == nil {
return false
}
for _ , key := range enc .keys {
if key == k {
return true
}
}
return false
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .