Documentation
¶
Index ¶
- Constants
- func CommonParseLayouts() []string
- type Client
- type Codec
- func (c *Codec) Close() error
- func (c *Codec) ReadResponseBody(v interface{}) error
- func (c *Codec) ReadResponseHeader(resp *rpc.Response) error
- func (c *Codec) SetDecoder(decoder Decoder)
- func (c *Codec) SetEncoder(encoder Encoder)
- func (c *Codec) WriteRequest(req *rpc.Request, args interface{}) error
- type Decoder
- type Encoder
- type Fault
- type LayoutTimeFormatter
- type Option
- type Response
- type ResponseArrayData
- type ResponseFault
- type ResponseParam
- type ResponseStructMember
- type ResponseValue
- type StdDecoder
- type StdEncoder
- type TimeFormatter
Constants ¶
const ( // LayoutISO8601Compact is the form shown in the XML-RPC specification's example, e.g. "19980717T14:08:55". LayoutISO8601Compact = "20060102T15:04:05" // LayoutISO8601CompactZoned is the compact form with a numeric timezone offset, e.g. "19980717T14:08:55+0200". LayoutISO8601CompactZoned = "20060102T15:04:05Z0700" // LayoutISO8601Basic is the ISO8601 basic form, without any separators, e.g. "19980717T140855". LayoutISO8601Basic = "20060102T150405" // LayoutISO8601BasicZoned is the basic form with a numeric timezone offset, e.g. "19980717T140855+0200". LayoutISO8601BasicZoned = "20060102T150405Z0700" // LayoutISO8601Extended is the extended form without a timezone offset, e.g. "1998-07-17T14:08:55". LayoutISO8601Extended = "2006-01-02T15:04:05" // LayoutISO8601ExtendedZoned is the extended form with a timezone offset, e.g. "1998-07-17T14:08:55+02:00". // This is equivalent to time.RFC3339. LayoutISO8601ExtendedZoned = time.RFC3339 )
Layouts for the XML-RPC <dateTime.iso8601> type, for use with LayoutTimeFormatter.
ISO8601 calls a form with no separators "basic" and a form with separators "extended". The layout shown in the XML-RPC specification's example is neither: it combines a basic date with an extended time, and is called compact here. The specification does not mandate a layout, and leaves timezone assumptions to server documentation.
Variables ¶
This section is empty.
Functions ¶
func CommonParseLayouts ¶ added in v0.8.0
func CommonParseLayouts() []string
CommonParseLayouts returns the dateTime.iso8601 layouts commonly encountered in the wild, ordered most to least specific. Intended for LayoutTimeFormatter.ParseLayouts when the exact form a server emits is unknown or inconsistent.
Types ¶
type Client ¶
Client is responsible for making calls to RPC services with help of underlying rpc.Client.
func NewClient ¶
NewClient creates a Client with http.DefaultClient. If provided endpoint is not valid, an error is returned.
func NewCustomClient
deprecated
added in
v0.2.0
type Codec ¶
type Codec struct {
// contains filtered or unexported fields
}
Codec implements methods required by rpc.ClientCodec In this implementation Codec is the one performing actual RPC requests with http.Client.
func NewCodec ¶
NewCodec creates a new Codec bound to provided endpoint. Provided client will be used to perform RPC requests.
func (*Codec) ReadResponseBody ¶
func (*Codec) SetDecoder ¶ added in v0.4.0
SetDecoder allows setting a new Decoder on the codec
func (*Codec) SetEncoder ¶ added in v0.4.0
SetEncoder allows setting a new Encoder on the codec
type Decoder ¶ added in v0.1.1
type Decoder interface {
DecodeRaw(body []byte, v interface{}) error
Decode(response *Response, v interface{}) error
DecodeFault(response *Response) *Fault
}
Decoder implementations provide mechanisms for parsing of XML-RPC responses to native data-types.
type Encoder ¶ added in v0.1.1
Encoder implementations are responsible for handling encoding of XML-RPC requests to the proper wire format.
type Fault ¶
type Fault struct {
// Code provides numerical failure code
Code int
// String includes more detailed information about the fault, such as error name and cause
String string
}
Fault is a wrapper for XML-RPC fault object
type LayoutTimeFormatter ¶ added in v0.8.0
type LayoutTimeFormatter struct {
// FormatLayout is used to encode values. Defaults to time.RFC3339.
// Zone-less layouts should be paired with FormatLocation.
FormatLayout string
// FormatLocation, when set, converts values to this location before encoding.
// This matters for zone-less layouts, where the offset is lost on the wire.
// Defaults to nil, meaning values are encoded in whichever location they carry.
FormatLocation *time.Location
// ParseLayouts are attempted in order when decoding. Defaults to FormatLayout.
// When set, it is the complete list - FormatLayout is not appended, so include it
// to keep accepting values this client encodes. See CommonParseLayouts.
ParseLayouts []string
// ParseLocation resolves decoded values whose layout carries no timezone offset.
// Values that do carry an offset always keep it.
//
// Defaults to nil, meaning time.Parse semantics: values without an offset are UTC,
// and an offset matching the process timezone yields that location, keeping its DST
// rules. Set this to decode into one location regardless of where the process runs.
ParseLocation *time.Location
}
LayoutTimeFormatter is the default TimeFormatter implementation, driven by time package layout strings. A nil *LayoutTimeFormatter behaves as the zero value.
func (*LayoutTimeFormatter) FormatTime ¶ added in v0.8.0
func (f *LayoutTimeFormatter) FormatTime(t time.Time) string
type Option ¶ added in v0.2.0
type Option func(client *Client)
Option is a function that configures a Client by mutating it
func Headers ¶ added in v0.2.0
Headers option allows setting custom headers that will be passed with every request
func HttpClient ¶ added in v0.2.0
HttpClient option allows setting custom HTTP Client to be used for every request
func SkipUnknownFields ¶ added in v0.4.0
SkipUnknownFields option allows setting decoder setting to skip unknown fields. This is only effective if using standard client, which in turn uses StdDecoder.
func TimeFormat ¶ added in v0.8.0
func TimeFormat(formatter TimeFormatter) Option
TimeFormat option allows customizing how time.Time values are encoded to and decoded from the XML-RPC <dateTime.iso8601> type. When unset, values are encoded and decoded using time.RFC3339. See LayoutTimeFormatter for layout-based customization.
This is only effective if using standard client, which in turn uses StdEncoder and StdDecoder.
type Response ¶ added in v0.1.1
type Response struct {
Params []*ResponseParam `xml:"params>param"`
Fault *ResponseFault `xml:"fault,omitempty"`
}
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.
func NewResponse ¶ added in v0.1.1
NewResponse creates a Response object from XML body. It relies on XML Unmarshaler and if it fails - error is returned.
type ResponseArrayData ¶ added in v0.5.1
type ResponseArrayData struct {
Values []*ResponseValue `xml:"value"`
}
ResponseArrayData contains a list of array values
type ResponseFault ¶ added in v0.1.1
type ResponseFault struct {
Value ResponseValue `xml:"value"`
}
ResponseFault wraps around failure
type ResponseParam ¶ added in v0.1.1
type ResponseParam struct {
Value ResponseValue `xml:"value"`
}
ResponseParam encapsulates a nested parameter value
type ResponseStructMember ¶ added in v0.1.1
type ResponseStructMember struct {
Name string `xml:"name"`
Value ResponseValue `xml:"value"`
}
ResponseStructMember contains name-value pair of the struct
type ResponseValue ¶ added in v0.1.1
type ResponseValue struct {
Array *ResponseArrayData `xml:"array>data"`
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"`
RawXML string `xml:",innerxml"`
}
ResponseValue encapsulates one of the data types for each parameter. Only one field should be set.
type StdDecoder ¶ added in v0.1.1
type StdDecoder struct {
// contains filtered or unexported fields
}
StdDecoder is the default implementation of the Decoder interface.
func (*StdDecoder) Decode ¶ added in v0.1.1
func (d *StdDecoder) Decode(response *Response, v interface{}) error
func (*StdDecoder) DecodeFault ¶ added in v0.1.1
func (d *StdDecoder) DecodeFault(response *Response) *Fault
func (*StdDecoder) DecodeRaw ¶ added in v0.1.1
func (d *StdDecoder) DecodeRaw(body []byte, v interface{}) error
type StdEncoder ¶ added in v0.1.1
type StdEncoder struct {
// contains filtered or unexported fields
}
StdEncoder is the default implementation of Encoder interface.
type TimeFormatter ¶ added in v0.8.0
type TimeFormatter interface {
FormatTime(t time.Time) string
ParseTime(value string) (time.Time, error)
}
TimeFormatter implementations convert between time.Time and the string contents of the XML-RPC <dateTime.iso8601> type.
Implementations must be safe for concurrent use and must not be mutated once passed to a Client. ParseTime is never called with an empty string - empty XML values are decoded to the zero time.Time by the decoder.