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 }
52