@@ -8,9 +8,10 @@ import (
88 . "github.com/polydawn/refmt/tok"
99)
1010
11- func NewEncoder (wr io.Writer ) * Encoder {
11+ func NewEncoder (wr io.Writer , cfg EncodeOptions ) * Encoder {
1212 return & Encoder {
1313 wr : wr ,
14+ cfg : cfg ,
1415 stack : make ([]phase , 0 , 10 ),
1516 }
1617}
@@ -25,9 +26,8 @@ func (d *Encoder) Reset() {
2526 A json.Encoder is a TokenSink implementation that emits json bytes.
2627*/
2728type Encoder struct {
28- wr io.Writer
29- indent []byte
30- line []byte
29+ wr io.Writer
30+ cfg EncodeOptions
3131
3232 // Stack, tracking how many array and map opens are outstanding.
3333 // (Values are only 'phase_mapExpectKeyOrEnd' and 'phase_arrExpectValueOrEnd'.)
@@ -76,9 +76,9 @@ func (d *Encoder) Step(tok *Token) (done bool, err error) {
7676 case TArrOpen :
7777 return true , fmt .Errorf ("unexpected arrOpen; expected start of key or end of map" )
7878 case TMapClose :
79- d .wr .Write (d .line )
79+ d .wr .Write (d .cfg . Line )
8080 for i := 1 ; i < len (d .stack ); i ++ {
81- d .wr .Write (d .indent )
81+ d .wr .Write (d .cfg . Indent )
8282 }
8383 d .wr .Write (wordMapClose )
8484 return d .popPhase ()
@@ -132,9 +132,9 @@ func (d *Encoder) Step(tok *Token) (done bool, err error) {
132132 case TMapClose :
133133 return true , fmt .Errorf ("unexpected mapClose; expected start of value or end of array" )
134134 case TArrClose :
135- d .wr .Write (d .line )
135+ d .wr .Write (d .cfg . Line )
136136 for i := 1 ; i < len (d .stack ); i ++ {
137- d .wr .Write (d .indent )
137+ d .wr .Write (d .cfg . Indent )
138138 }
139139 d .wr .Write (wordArrClose )
140140 return d .popPhase ()
@@ -159,7 +159,7 @@ func (d *Encoder) pushPhase(p phase) {
159159func (d * Encoder ) popPhase () (bool , error ) {
160160 n := len (d .stack ) - 1
161161 if n == 0 {
162- d .wr .Write (d .line )
162+ d .wr .Write (d .cfg . Line )
163163 return true , nil
164164 }
165165 if n < 0 { // the state machines are supposed to have already errored better
@@ -178,9 +178,9 @@ func (d *Encoder) entrySep() {
178178 d .wr .Write (wordComma )
179179 }
180180 d .some = true
181- d .wr .Write (d .line )
181+ d .wr .Write (d .cfg . Line )
182182 for i := 0 ; i < len (d .stack ); i ++ {
183- d .wr .Write (d .indent )
183+ d .wr .Write (d .cfg . Indent )
184184 }
185185}
186186
0 commit comments