mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-12-22 10:48:30 +00:00
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
|
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"`
|
||
|
}
|