Skip to content

Commit eadd63b

Browse files
committed
feedback around xml Node decoder
1 parent 7f83194 commit eadd63b

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

xml/xml_decoder.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ type NodeDecoder struct {
1313
StartEl xml.StartElement
1414
}
1515

16-
// NewNodeDecoder returns a ptr to an initialized XMLNodeDecoder
17-
func NewNodeDecoder(decoder *xml.Decoder, startEl xml.StartElement) *NodeDecoder {
18-
return &NodeDecoder{
16+
// WrapNodeDecoder returns an initialized XMLNodeDecoder
17+
func WrapNodeDecoder(decoder *xml.Decoder, startEl xml.StartElement) NodeDecoder {
18+
return NodeDecoder{
1919
Decoder: decoder,
2020
StartEl: startEl,
2121
}
@@ -24,7 +24,7 @@ func NewNodeDecoder(decoder *xml.Decoder, startEl xml.StartElement) *NodeDecoder
2424
// Token on a Node Decoder returns a xml StartElement. It returns a boolean that indicates the
2525
// a token is the node decoder's end node token; and an error which indicates any error
2626
// that occurred while retrieving the start element
27-
func (d *NodeDecoder) Token() (t xml.StartElement, done bool, err error) {
27+
func (d NodeDecoder) Token() (t xml.StartElement, done bool, err error) {
2828
for {
2929
token, e := d.Decoder.Token()
3030
if e != nil {
@@ -50,7 +50,7 @@ func (d *NodeDecoder) Token() (t xml.StartElement, done bool, err error) {
5050
// Value provides an abstraction to retrieve char data value within an xml element.
5151
// The method will return an error if it encounters a nested xml element instead of char data.
5252
// This method should only be used to retrieve simple type or blob shape values as []byte.
53-
func (d *NodeDecoder) Value() (c []byte, done bool, err error) {
53+
func (d NodeDecoder) Value() (c []byte, done bool, err error) {
5454
t, e := d.Decoder.Token()
5555
if e != nil {
5656
return c, done, e

xml/xml_decoder_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestXMLNodeDecoder_Token(t *testing.T) {
6767
t.Fatalf("expected error to contain %v, found %v", e, a.Error())
6868
}
6969
}
70-
nodeDecoder := NewNodeDecoder(xmlDecoder, st)
70+
nodeDecoder := WrapNodeDecoder(xmlDecoder, st)
7171
token, done, err := nodeDecoder.Token()
7272
if err != nil {
7373
if len(c.expectedError) == 0 {
@@ -101,7 +101,7 @@ func TestXMLNodeDecoder_TokenExample(t *testing.T) {
101101
}
102102

103103
// nodeDecoder will track <Struct> tag as root node of the document
104-
nodeDecoder := NewNodeDecoder(xmlDecoder, st)
104+
nodeDecoder := WrapNodeDecoder(xmlDecoder, st)
105105

106106
// Retrieves <Response> tag
107107
token, done, err := nodeDecoder.Token()
@@ -185,7 +185,7 @@ func TestXMLNodeDecoder_Value(t *testing.T) {
185185
t.Fatalf("expected error to contain %v, found %v", e, a.Error())
186186
}
187187
}
188-
nodeDecoder := NewNodeDecoder(xmlDecoder, st)
188+
nodeDecoder := WrapNodeDecoder(xmlDecoder, st)
189189
token, done, err := nodeDecoder.Value()
190190
if err != nil {
191191
if len(c.expectedError) == 0 {

xml/xml_utils.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func GetResponseErrorCode(r io.Reader, noErrorWrapping bool) (string, error) {
1515
}
1616

1717
if noErrorWrapping {
18-
var errResponse errorWrapper
18+
var errResponse errorBody
1919
err := xml.Unmarshal(rb, &errResponse)
2020
if err != nil {
2121
return "", fmt.Errorf("error while fetching xml error response code: %w", err)
@@ -30,10 +30,15 @@ func GetResponseErrorCode(r io.Reader, noErrorWrapping bool) (string, error) {
3030
return errResponse.Err.Code, nil
3131
}
3232

33+
// errorResponse represents the outer error response body
34+
// i.e. <ErrorResponse>...</ErrorResponse>
3335
type errorResponse struct {
34-
Err errorWrapper `xml:"Error"`
36+
Err errorBody `xml:"Error"`
3537
}
3638

37-
type errorWrapper struct {
39+
// errorBody represents the inner error body is wrapped by <ErrorResponse> tag
40+
// eg. if error response is <ErrorResponse><Error>...</Error><ErrorResponse>
41+
// here errorBody represents <Error>...</Error>
42+
type errorBody struct {
3843
Code string `xml:"Code"`
3944
}

0 commit comments

Comments
 (0)