You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.1 KiB
66 lines
1.1 KiB
// Package jx implements RFC 7159 json encoding and decoding. |
|
package jx |
|
|
|
import ( |
|
"sync" |
|
) |
|
|
|
// Valid reports whether data is valid json. |
|
func Valid(data []byte) bool { |
|
d := GetDecoder() |
|
defer PutDecoder(d) |
|
d.ResetBytes(data) |
|
return d.Validate() == nil |
|
} |
|
|
|
var ( |
|
encPool = &sync.Pool{ |
|
New: func() interface{} { |
|
return &Encoder{} |
|
}, |
|
} |
|
writerPool = &sync.Pool{ |
|
New: func() interface{} { |
|
return &Writer{} |
|
}, |
|
} |
|
decPool = &sync.Pool{ |
|
New: func() interface{} { |
|
return &Decoder{} |
|
}, |
|
} |
|
) |
|
|
|
// GetDecoder gets *Decoder from pool. |
|
func GetDecoder() *Decoder { |
|
return decPool.Get().(*Decoder) |
|
} |
|
|
|
// PutDecoder puts *Decoder into pool. |
|
func PutDecoder(d *Decoder) { |
|
d.Reset(nil) |
|
decPool.Put(d) |
|
} |
|
|
|
// GetEncoder returns *Encoder from pool. |
|
func GetEncoder() *Encoder { |
|
return encPool.Get().(*Encoder) |
|
} |
|
|
|
// PutEncoder puts *Encoder to pool |
|
func PutEncoder(e *Encoder) { |
|
e.Reset() |
|
e.SetIdent(0) |
|
encPool.Put(e) |
|
} |
|
|
|
// GetWriter returns *Writer from pool. |
|
func GetWriter() *Writer { |
|
return writerPool.Get().(*Writer) |
|
} |
|
|
|
// PutWriter puts *Writer to pool |
|
func PutWriter(e *Writer) { |
|
e.Reset() |
|
writerPool.Put(e) |
|
}
|
|
|