peridot/vendor/alexejk.io/go-xmlrpc
2022-07-07 22:13:21 +02:00
..
.editorconfig Initial commit 2022-07-07 22:13:21 +02:00
.gitignore Initial commit 2022-07-07 22:13:21 +02:00
BUILD.bazel Initial commit 2022-07-07 22:13:21 +02:00
CHANGELOG.md Initial commit 2022-07-07 22:13:21 +02:00
client.go Initial commit 2022-07-07 22:13:21 +02:00
codec.go Initial commit 2022-07-07 22:13:21 +02:00
codecov.yaml Initial commit 2022-07-07 22:13:21 +02:00
decode_response.go Initial commit 2022-07-07 22:13:21 +02:00
decode.go Initial commit 2022-07-07 22:13:21 +02:00
doc.go Initial commit 2022-07-07 22:13:21 +02:00
Dockerfile Initial commit 2022-07-07 22:13:21 +02:00
encode.go Initial commit 2022-07-07 22:13:21 +02:00
fault.go Initial commit 2022-07-07 22:13:21 +02:00
go.mod Initial commit 2022-07-07 22:13:21 +02:00
go.sum Initial commit 2022-07-07 22:13:21 +02:00
LICENSE Initial commit 2022-07-07 22:13:21 +02:00
Makefile Initial commit 2022-07-07 22:13:21 +02:00
options.go Initial commit 2022-07-07 22:13:21 +02:00
README.md Initial commit 2022-07-07 22:13:21 +02:00

XML-RPC Client for Go

This is an implementation of client-side part of XML-RPC protocol in Go.

GitHub Workflow Status codecov Go Report Card

GoDoc GitHub GitHub release (latest SemVer)

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, use HttpClient option, otherwise http.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>) or float64 (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.