You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.6 KiB
57 lines
1.6 KiB
package xml
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
// ErrorComponents represents the error response fields
|
|
// that will be deserialized from an xml error response body
|
|
type ErrorComponents struct {
|
|
Code string
|
|
Message string
|
|
RequestID string
|
|
}
|
|
|
|
// GetErrorResponseComponents returns the error fields from an xml error response body
|
|
func GetErrorResponseComponents(r io.Reader, noErrorWrapping bool) (ErrorComponents, error) {
|
|
if noErrorWrapping {
|
|
var errResponse noWrappedErrorResponse
|
|
if err := xml.NewDecoder(r).Decode(&errResponse); err != nil && err != io.EOF {
|
|
return ErrorComponents{}, fmt.Errorf("error while deserializing xml error response: %w", err)
|
|
}
|
|
return ErrorComponents{
|
|
Code: errResponse.Code,
|
|
Message: errResponse.Message,
|
|
RequestID: errResponse.RequestID,
|
|
}, nil
|
|
}
|
|
|
|
var errResponse wrappedErrorResponse
|
|
if err := xml.NewDecoder(r).Decode(&errResponse); err != nil && err != io.EOF {
|
|
return ErrorComponents{}, fmt.Errorf("error while deserializing xml error response: %w", err)
|
|
}
|
|
return ErrorComponents{
|
|
Code: errResponse.Code,
|
|
Message: errResponse.Message,
|
|
RequestID: errResponse.RequestID,
|
|
}, nil
|
|
}
|
|
|
|
// noWrappedErrorResponse represents the error response body with
|
|
// no internal <Error></Error wrapping
|
|
type noWrappedErrorResponse struct {
|
|
Code string `xml:"Code"`
|
|
Message string `xml:"Message"`
|
|
RequestID string `xml:"RequestId"`
|
|
}
|
|
|
|
// wrappedErrorResponse represents the error response body
|
|
// wrapped within <Error>...</Error>
|
|
type wrappedErrorResponse struct {
|
|
Code string `xml:"Error>Code"`
|
|
Message string `xml:"Error>Message"`
|
|
RequestID string `xml:"RequestId"`
|
|
}
|