encoder.go (1382B)
1 package xml 2 3 // writer interface used by the xml encoder to write an encoded xml 4 // document in a writer. 5 type writer interface { 6 7 // Write takes in a byte slice and returns number of bytes written and error 8 Write(p []byte) (n int, err error) 9 10 // WriteRune takes in a rune and returns number of bytes written and error 11 WriteRune(r rune) (n int, err error) 12 13 // WriteString takes in a string and returns number of bytes written and error 14 WriteString(s string) (n int, err error) 15 16 // String method returns a string 17 String() string 18 19 // Bytes return a byte slice. 20 Bytes() []byte 21 } 22 23 // Encoder is an XML encoder that supports construction of XML values 24 // using methods. The encoder takes in a writer and maintains a scratch buffer. 25 type Encoder struct { 26 w writer 27 scratch *[]byte 28 } 29 30 // NewEncoder returns an XML encoder 31 func NewEncoder(w writer) *Encoder { 32 scratch := make([]byte, 64) 33 34 return &Encoder{w: w, scratch: &scratch} 35 } 36 37 // String returns the string output of the XML encoder 38 func (e Encoder) String() string { 39 return e.w.String() 40 } 41 42 // Bytes returns the []byte slice of the XML encoder 43 func (e Encoder) Bytes() []byte { 44 return e.w.Bytes() 45 } 46 47 // RootElement builds a root element encoding 48 // It writes it's start element tag. The value should be closed. 49 func (e Encoder) RootElement(element StartElement) Value { 50 return newValue(e.w, e.scratch, element) 51 }