Skip to content

Commit

Permalink
encoder/decoder release API
Browse files Browse the repository at this point in the history
  • Loading branch information
zerosnake0 committed Oct 8, 2020
1 parent aa03f31 commit 0b91e72
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 24 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ err := jzon.Unmarshal(b, &data)

// Marshal
b, err := jzon.Marshal(&data)

// Decoder
dec := jzon.NewDecoder(reader)
defer dec.Release()

// Encoder
enc := jzon.NewEncoder(writer)
defer enc.Release()
```

### Iterator
Expand Down
5 changes: 5 additions & 0 deletions decoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ type Decoder struct {
err error
}

func (dec *Decoder) Release() {
dec.it.Release()
dec.it = nil
}

func (dec *Decoder) UseNumber() {
dec.it.useNumber = true
}
Expand Down
5 changes: 0 additions & 5 deletions decoder_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,6 @@ func (decCfg *DecoderConfig) NewDecoder(r io.Reader) *Decoder {
}
}

func (decCfg *DecoderConfig) ReturnDecoder(dec *Decoder) {
dec.it.Release()
dec.it = nil
}

// the typ must be a pointer type
func (decCfg *DecoderConfig) createDecoder(rType rtype, ptrType reflect.Type) ValDecoder {
decCfg.cacheMu.Lock()
Expand Down
20 changes: 15 additions & 5 deletions decoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ func TestDecoder(t *testing.T) {
check(dec, 1, false, 6, 7)
}
f(json.NewDecoder(newReader()))
f(NewDecoder(newReader()))
dec := NewDecoder(newReader())
defer dec.Release()
f(dec)
})
t.Run("failure at start", func(t *testing.T) {
must := require.New(t)
Expand All @@ -114,7 +116,9 @@ func TestDecoder(t *testing.T) {
must.Equal(err2, err)
}
f(json.NewDecoder(newReader()))
f(NewDecoder(newReader()))
dec := NewDecoder(newReader())
defer dec.Release()
f(dec)
})
t.Run("failure at middle", func(t *testing.T) {
must := require.New(t)
Expand All @@ -134,7 +138,9 @@ func TestDecoder(t *testing.T) {
must.Error(err2)
}
f(json.NewDecoder(newReader()))
f(NewDecoder(newReader()))
dec := NewDecoder(newReader())
defer dec.Release()
f(dec)
})
})
}
Expand All @@ -153,7 +159,9 @@ func TestDecoder_UseNumber(t *testing.T) {
must.Equal(json.Number(s), i)
}
f(json.NewDecoder(newReader()))
f(NewDecoder(newReader()))
dec := NewDecoder(newReader())
defer dec.Release()
f(dec)
}

func TestDecoder_DisallowUnknownFields(t *testing.T) {
Expand All @@ -170,5 +178,7 @@ func TestDecoder_DisallowUnknownFields(t *testing.T) {
must.Error(err)
}
f(json.NewDecoder(newReader()))
f(NewDecoder(newReader()))
dec := NewDecoder(newReader())
defer dec.Release()
f(dec)
}
5 changes: 5 additions & 0 deletions encoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ type Encoder struct {
err error
}

func (e *Encoder) Release() {
e.s.Release()
e.s = nil
}

func encodeInternal(s *Streamer, v interface{}) error {
if err := s.Value(v).Flush(); err != nil {
return err
Expand Down
5 changes: 0 additions & 5 deletions encoder_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,6 @@ func (encCfg *EncoderConfig) NewEncoder(w io.Writer) *Encoder {
}
}

func (encCfg *EncoderConfig) ReturnEncoder(enc *Encoder) {
enc.s.Release()
enc.s = nil
}

func (encCfg *EncoderConfig) getEncoderFromCache(rtype rtype) ValEncoder {
return encCfg.encoderCache.Load().(encoderCache)[rtype]
}
Expand Down
4 changes: 3 additions & 1 deletion encoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ func TestEncoder_SetEscapeHTML(t *testing.T) {
must.Equal(`"`+s+`"`+"\n", buf.String(), "%T", enc)
}
f(json.NewEncoder(buf))
f(NewEncoder(buf))
enc := NewEncoder(buf)
defer enc.Release()
f(enc)
}

// func TestEncoder_SetIndent(t *testing.T) {
Expand Down
8 changes: 0 additions & 8 deletions standard_compatible.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,6 @@ func NewDecoder(r io.Reader) *Decoder {
return DefaultDecoderConfig.NewDecoder(r)
}

func ReturnDecoder(dec *Decoder) {
DefaultDecoderConfig.ReturnDecoder(dec)
}

func NewEncoder(w io.Writer) *Encoder {
return DefaultEncoderConfig.NewEncoder(w)
}

func ReturnEncoder(enc *Encoder) {
DefaultEncoderConfig.ReturnEncoder(enc)
}

0 comments on commit 0b91e72

Please sign in to comment.