encoder.go

 1package xml
 2
 3// writer interface used by the xml encoder to write an encoded xml
 4// document in a writer.
 5type 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.
25type Encoder struct {
26	w       writer
27	scratch *[]byte
28}
29
30// NewEncoder returns an XML encoder
31func 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
38func (e Encoder) String() string {
39	return e.w.String()
40}
41
42// Bytes returns the []byte slice of the XML encoder
43func (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.
49func (e Encoder) RootElement(element StartElement) Value {
50	return newValue(e.w, e.scratch, element)
51}