I won't remove the bufio.Buffer for Marshal now, it isn't a performance issue as far as I can tell, and I'd have to fake Flush().
// error if any.
func Marshal(v interface{}) ([]byte, error) {
var buf bytes.Buffer
- e := Encoder{Writer: bufio.NewWriter(&buf)}
+ e := Encoder{w: bufio.NewWriter(&buf)}
err := e.Encode(v)
if err != nil {
return nil, err
}
func NewEncoder(w io.Writer) *Encoder {
- return &Encoder{Writer: bufio.NewWriter(w)}
+ return &Encoder{w: bufio.NewWriter(w)}
}
package bencode
import (
- "bufio"
+ "io"
"reflect"
"runtime"
"sort"
}
type Encoder struct {
- *bufio.Writer
+ w interface {
+ Flush() error
+ io.Writer
+ WriteString(string) (int, error)
+ }
scratch [64]byte
}
}
}()
e.reflect_value(reflect.ValueOf(v))
- return e.Flush()
+ return e.w.Flush()
}
type string_values []reflect.Value
func (sv string_values) get(i int) string { return sv[i].String() }
func (e *Encoder) write(s []byte) {
- _, err := e.Write(s)
+ _, err := e.w.Write(s)
if err != nil {
panic(err)
}
}
func (e *Encoder) write_string(s string) {
- _, err := e.WriteString(s)
+ _, err := e.w.WriteString(s)
if err != nil {
panic(err)
}