Sfoglia il codice sorgente

#34 implement NewEncoder

Tao Wen 8 anni fa
parent
commit
45bbb40a9f
2 ha cambiato i file con 31 aggiunte e 0 eliminazioni
  1. 19 0
      feature_adapter.go
  2. 12 0
      jsoniter_adapter_test.go

+ 19 - 0
feature_adapter.go

@@ -125,4 +125,23 @@ func (adapter *AdaptedDecoder) More() bool {
 func (adapter *AdaptedDecoder) Buffered() io.Reader {
 	remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail]
 	return bytes.NewReader(remaining)
+}
+
+func NewEncoder(writer io.Writer) *AdaptedEncoder {
+	stream := NewStream(writer, 512)
+	return &AdaptedEncoder{stream}
+}
+
+type AdaptedEncoder struct {
+	stream *Stream
+}
+
+func (adapter *AdaptedEncoder) Encode(val interface{}) error {
+	adapter.stream.WriteVal(val)
+	adapter.stream.Flush()
+	return adapter.stream.Error
+}
+
+func (adapter *AdaptedEncoder) SetIndent(prefix, indent string) {
+	// not implemented yet
 }

+ 12 - 0
jsoniter_adapter_test.go

@@ -31,4 +31,16 @@ func Test_new_decoder(t *testing.T) {
 	should.Nil(decoder2.Decode(&arr2))
 	should.Equal([]int{2}, arr2)
 	should.False(decoder2.More())
+}
+
+func Test_new_encoder(t *testing.T) {
+	should := require.New(t)
+	buf1 := &bytes.Buffer{}
+	encoder1 := json.NewEncoder(buf1)
+	encoder1.Encode([]int{1})
+	should.Equal("[1]\n", buf1.String())
+	buf2 := &bytes.Buffer{}
+	encoder2 := NewEncoder(buf2)
+	encoder2.Encode([]int{1})
+	should.Equal("[1]", buf2.String())
 }