1package xml
2
3// arrayMemberWrapper is the default member wrapper tag name for XML Array type
4var arrayMemberWrapper = StartElement{
5 Name: Name{Local: "member"},
6}
7
8// Array represents the encoding of a XML array type
9type Array struct {
10 w writer
11 scratch *[]byte
12
13 // member start element is the array member wrapper start element
14 memberStartElement StartElement
15
16 // isFlattened indicates if the array is a flattened array.
17 isFlattened bool
18}
19
20// newArray returns an array encoder.
21// It also takes in the member start element, array start element.
22// It takes in a isFlattened bool, indicating that an array is flattened array.
23//
24// A wrapped array ["value1", "value2"] is represented as
25// `<List><member>value1</member><member>value2</member></List>`.
26
27// A flattened array `someList: ["value1", "value2"]` is represented as
28// `<someList>value1</someList><someList>value2</someList>`.
29func newArray(w writer, scratch *[]byte, memberStartElement StartElement, arrayStartElement StartElement, isFlattened bool) *Array {
30 var memberWrapper = memberStartElement
31 if isFlattened {
32 memberWrapper = arrayStartElement
33 }
34
35 return &Array{
36 w: w,
37 scratch: scratch,
38 memberStartElement: memberWrapper,
39 isFlattened: isFlattened,
40 }
41}
42
43// Member adds a new member to the XML array.
44// It returns a Value encoder.
45func (a *Array) Member() Value {
46 v := newValue(a.w, a.scratch, a.memberStartElement)
47 v.isFlattened = a.isFlattened
48 return v
49}