mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-11-24 22:21:25 +00:00
ad0f7a5305
Upgrade to Go 1.20.5, Hydra v2 SDK, rules-go v0.44.2 (with proper resolves), protobuf v25.3 and mass upgrade of Go dependencies. |
||
---|---|---|
.. | ||
.editorconfig | ||
.gitignore | ||
BUILD.bazel | ||
CHANGELOG.md | ||
client.go | ||
codec.go | ||
codecov.yaml | ||
decode_response.go | ||
decode.go | ||
doc.go | ||
Dockerfile | ||
encode.go | ||
fault.go | ||
LICENSE | ||
Makefile | ||
options.go | ||
README.md |
XML-RPC Client for Go
This is an implementation of client-side part of XML-RPC protocol in Go.
Usage
Add dependency to your project:
go get -u alexejk.io/go-xmlrpc
Use it by creating an *xmlrpc.Client
and firing RPC method calls with Call()
.
package main
import(
"fmt"
"alexejk.io/go-xmlrpc"
)
func main() {
client, _ := xmlrpc.NewClient("https://bugzilla.mozilla.org/xmlrpc.cgi")
result := &struct {
BugzillaVersion struct {
Version string
}
}{}
_ = client.Call("Bugzilla.version", nil, result)
fmt.Printf("Version: %s\n", result.BugzillaVersion.Version)
}
Customization is supported by passing a list of Option
to the NewClient
function.
For instance:
- To customize any aspect of
http.Client
used to perform requests, useHttpClient
option, otherwisehttp.DefaultClient
will be used - To pass custom headers, make use of
Headers
option.
Argument encoding
Arguments to the remote RPC method are passed on as a *struct
. This struct is encoded into XML-RPC types based on following rules:
- Order of fields in struct type matters - fields are taken in the order they are defined on the type.
- Numbers are to be specified as
int
(encoded as<int>
) orfloat64
(encoded as<double>
) - Both pointer and value references are accepted (pointers are followed to actual values)
Response decoding
Response is decoded following similar rules to argument encoding.
- Order of fields is important.
- Outer struct should contain exported field for each response parameter.
- Structs may contain pointers - they will be initialized if required.
Building
To build this project, simply run make all
.
If you prefer building in Docker instead - make build-in-docker
is your friend.