瀏覽代碼

add Api interface to allow save the frozen config

Tao Wen 8 年之前
父節點
當前提交
31afe6450e
共有 3 個文件被更改,包括 21 次插入11 次删除
  1. 14 4
      feature_config.go
  2. 5 5
      jsoniter_customize_test.go
  3. 2 2
      jsoniter_interface_test.go

+ 14 - 4
feature_config.go

@@ -29,6 +29,16 @@ type frozenConfig struct {
 	iteratorPool       chan *Iterator
 }
 
+type Api interface {
+	MarshalToString(v interface{}) (string, error)
+	Marshal(v interface{}) ([]byte, error)
+	UnmarshalFromString(str string, v interface{}) error
+	Unmarshal(data []byte, v interface{}) error
+	Get(data []byte, path ...interface{}) Any
+	NewEncoder(writer io.Writer) *AdaptedEncoder
+	NewDecoder(reader io.Reader) *AdaptedDecoder
+}
+
 var ConfigDefault = Config{
 	EscapeHtml: true,
 }.Froze()
@@ -151,15 +161,15 @@ func (cfg *frozenConfig) getEncoderFromCache(cacheKey reflect.Type) Encoder {
 	return cache[cacheKey]
 }
 
-// CleanDecoders cleans decoders registered or cached
-func (cfg *frozenConfig) CleanDecoders() {
+// cleanDecoders cleans decoders registered or cached
+func (cfg *frozenConfig) cleanDecoders() {
 	typeDecoders = map[string]Decoder{}
 	fieldDecoders = map[string]Decoder{}
 	atomic.StorePointer(&cfg.decoderCache, unsafe.Pointer(&map[string]Decoder{}))
 }
 
-// CleanEncoders cleans encoders registered or cached
-func (cfg *frozenConfig) CleanEncoders() {
+// cleanEncoders cleans encoders registered or cached
+func (cfg *frozenConfig) cleanEncoders() {
 	typeEncoders = map[string]Encoder{}
 	fieldEncoders = map[string]Encoder{}
 	atomic.StorePointer(&cfg.encoderCache, unsafe.Pointer(&map[string]Encoder{}))

+ 5 - 5
jsoniter_customize_test.go

@@ -19,7 +19,7 @@ func Test_customize_type_decoder(t *testing.T) {
 		}
 		*((*time.Time)(ptr)) = t
 	})
-	defer ConfigDefault.CleanDecoders()
+	defer ConfigDefault.cleanDecoders()
 	val := time.Time{}
 	err := Unmarshal([]byte(`"2016-12-05 08:43:28"`), &val)
 	if err != nil {
@@ -37,7 +37,7 @@ func Test_customize_type_encoder(t *testing.T) {
 		t := *((*time.Time)(ptr))
 		stream.WriteString(t.UTC().Format("2006-01-02 15:04:05"))
 	})
-	defer ConfigDefault.CleanEncoders()
+	defer ConfigDefault.cleanEncoders()
 	val := time.Unix(0, 0)
 	str, err := MarshalToString(val)
 	should.Nil(err)
@@ -45,13 +45,13 @@ func Test_customize_type_encoder(t *testing.T) {
 }
 
 func Test_customize_byte_array_encoder(t *testing.T) {
-	ConfigDefault.CleanEncoders()
+	ConfigDefault.cleanEncoders()
 	should := require.New(t)
 	RegisterTypeEncoder("[]uint8", func(ptr unsafe.Pointer, stream *Stream) {
 		t := *((*[]byte)(ptr))
 		stream.WriteString(string(t))
 	})
-	defer ConfigDefault.CleanEncoders()
+	defer ConfigDefault.cleanEncoders()
 	val := []byte("abc")
 	str, err := MarshalToString(val)
 	should.Nil(err)
@@ -74,7 +74,7 @@ func Test_customize_field_decoder(t *testing.T) {
 	RegisterFieldDecoder("jsoniter.Tom", "field1", func(ptr unsafe.Pointer, iter *Iterator) {
 		*((*string)(ptr)) = strconv.Itoa(iter.ReadInt())
 	})
-	defer ConfigDefault.CleanDecoders()
+	defer ConfigDefault.cleanDecoders()
 	tom := Tom{}
 	err := Unmarshal([]byte(`{"field1": 100}`), &tom)
 	if err != nil {

+ 2 - 2
jsoniter_interface_test.go

@@ -141,8 +141,8 @@ func Test_encode_object_contain_non_empty_interface(t *testing.T) {
 }
 
 func Test_nil_non_empty_interface(t *testing.T) {
-	ConfigDefault.CleanEncoders()
-	ConfigDefault.CleanDecoders()
+	ConfigDefault.cleanEncoders()
+	ConfigDefault.cleanDecoders()
 	type TestObject struct {
 		Field []MyInterface
 	}