peridot/vendor/alexejk.io/go-xmlrpc/decode_response.go

53 lines
1.6 KiB
Go
Raw Permalink Normal View History

2022-07-07 20:11:50 +00:00
package xmlrpc
import "encoding/xml"
// Response is the basic parsed object of the XML-RPC response body.
// While it's not convenient to use this object directly - it contains all the information needed to unmarshal into other data-types.
type Response struct {
Params []ResponseParam `xml:"params>param"`
Fault *ResponseFault `xml:"fault,omitempty"`
}
// NewResponse creates a Response object from XML body.
// It relies on XML Unmarshaler and if it fails - error is returned.
func NewResponse(body []byte) (*Response, error) {
response := &Response{}
if err := xml.Unmarshal(body, response); err != nil {
return nil, err
}
return response, nil
}
// ResponseParam encapsulates a nested parameter value
type ResponseParam struct {
Value ResponseValue `xml:"value"`
}
// ResponseValue encapsulates one of the data types for each parameter.
// Only one field should be set.
type ResponseValue struct {
Array []*ResponseValue `xml:"array>data>value"`
Struct []*ResponseStructMember `xml:"struct>member"`
String string `xml:"string"`
Int string `xml:"int"`
Int4 string `xml:"i4"`
Double string `xml:"double"`
Boolean string `xml:"boolean"`
DateTime string `xml:"dateTime.iso8601"`
Base64 string `xml:"base64"`
}
// ResponseStructMember contains name-value pair of the struct
type ResponseStructMember struct {
Name string `xml:"name"`
Value ResponseValue `xml:"value"`
}
// ResponseFault wraps around failure
type ResponseFault struct {
Value ResponseValue `xml:"value"`
}