func (c *client) BuildList(owner, name string, opts ListOptions) ([]*Build, error) {
	var out []*Build
	uri := fmt.Sprintf(pathBuilds, c.addr, owner, name, encodeListOptions(opts))
	err := c.get(uri, &out)
	return out, err
}
BuildList returns a list of recent builds for the
the specified repository.
package drone
import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"net/url"
	"strconv"
	"strings"
)
const (
	pathSelf              = "%s/api/user"
	pathRepos             = "%s/api/user/repos"
	pathIncomplete        = "%s/api/builds/incomplete"
	pathIncompleteV2      = "%s/api/builds/incomplete/v2"
	pathReposAll          = "%s/api/repos"
	pathRepo              = "%s/api/repos/%s/%s"
	pathChown             = "%s/api/repos/%s/%s/chown"
	pathRepair            = "%s/api/repos/%s/%s/repair"
	pathBuilds            = "%s/api/repos/%s/%s/builds?%s"
	pathBuild             = "%s/api/repos/%s/%s/builds/%v"
	pathApprove           = "%s/api/repos/%s/%s/builds/%d/approve/%d"
	pathDecline           = "%s/api/repos/%s/%s/builds/%d/decline/%d"
	pathPromote           = "%s/api/repos/%s/%s/builds/%d/promote?%s"
	pathRollback          = "%s/api/repos/%s/%s/builds/%d/rollback?%s"
	pathLog               = "%s/api/repos/%s/%s/builds/%d/logs/%d/%d"
	pathRepoSecrets       = "%s/api/repos/%s/%s/secrets"
	pathRepoSecret        = "%s/api/repos/%s/%s/secrets/%s"
	pathEncryptSecret     = "%s/api/repos/%s/%s/encrypt/secret"
	pathSign              = "%s/api/repos/%s/%s/sign"
	pathVerify            = "%s/api/repos/%s/%s/verify"
	pathCrons             = "%s/api/repos/%s/%s/cron"
	pathCron              = "%s/api/repos/%s/%s/cron/%s"
	pathSecrets           = "%s/api/secrets"
	pathSecretsNamespace  = "%s/api/secrets/%s"
	pathSecretsName       = "%s/api/secrets/%s/%s"
	pathUsers             = "%s/api/users"
	pathUser              = "%s/api/users/%s"
	pathQueue             = "%s/api/queue"
	pathServers           = "%s/api/servers"
	pathServer            = "%s/api/servers/%s"
	pathScalerPause       = "%s/api/pause"
	pathScalerResume      = "%s/api/resume"
	pathNodes             = "%s/api/nodes"
	pathNode              = "%s/api/nodes/%s"
	pathVersion           = "%s/version"
	pathTemplates         = "%s/api/templates"
	pathTemplateName      = "%s/api/templates/%s/%s"
	pathTemplateNamespace = "%s/api/templates/%s"
)
type client struct {
	client *http.Client
	addr   string
}
type ListOptions struct {
	Page int
	Size int
}
func encodeListOptions(opts ListOptions) string {
	params := url.Values{}
	if opts.Page != 0 {
		params.Set("page", strconv.Itoa(opts.Page))
	}
	if opts.Size != 0 {
		params.Set("per_page", strconv.Itoa(opts.Size))
	}
	return params.Encode()
}
func New(uri string) Client {
	return &client{http.DefaultClient, strings.TrimSuffix(uri, "/")}
}
func NewClient(uri string, cli *http.Client) Client {
	return &client{cli, strings.TrimSuffix(uri, "/")}
}
func (c *client) SetClient(client *http.Client) {
	c.client = client
}
func (c *client) SetAddress(addr string) {
	c.addr = addr
}
func (c *client) Self() (*User, error) {
	out := new(User)
	uri := fmt.Sprintf(pathSelf, c.addr)
	err := c.get(uri, out)
	return out, err
}
func (c *client) User(login string) (*User, error) {
	out := new(User)
	uri := fmt.Sprintf(pathUser, c.addr, login)
	err := c.get(uri, out)
	return out, err
}
func (c *client) UserList() ([]*User, error) {
	var out []*User
	uri := fmt.Sprintf(pathUsers, c.addr)
	err := c.get(uri, &out)
	return out, err
}
func (c *client) UserCreate(in *User) (*User, error) {
	out := new(User)
	uri := fmt.Sprintf(pathUsers, c.addr)
	err := c.post(uri, in, out)
	return out, err
}
func (c *client) UserUpdate(login string, in *UserPatch) (*User, error) {
	out := new(User)
	uri := fmt.Sprintf(pathUser, c.addr, login)
	err := c.patch(uri, in, out)
	return out, err
}
func (c *client) UserDelete(login string) error {
	uri := fmt.Sprintf(pathUser, c.addr, login)
	err := c.delete(uri)
	return err
}
func (c *client) Incomplete() ([]*Repo, error) {
	var out []*Repo
	uri := fmt.Sprintf(pathIncomplete, c.addr)
	err := c.get(uri, &out)
	return out, err
}
func (c *client) IncompleteV2() ([]*RepoBuildStage, error) {
	var out []*RepoBuildStage
	uri := fmt.Sprintf(pathIncompleteV2, c.addr)
	err := c.get(uri, &out)
	return out, err
}
func (c *client) Repo(owner, name string) (*Repo, error) {
	out := new(Repo)
	uri := fmt.Sprintf(pathRepo, c.addr, owner, name)
	err := c.get(uri, out)
	return out, err
}
func (c *client) RepoList() ([]*Repo, error) {
	var out []*Repo
	uri := fmt.Sprintf(pathRepos, c.addr)
	err := c.get(uri, &out)
	return out, err
}
func (c *client) RepoListSync() ([]*Repo, error) {
	var out []*Repo
	uri := fmt.Sprintf(pathRepos, c.addr)
	err := c.post(uri, nil, &out)
	return out, err
}
func (c *client) RepoListAll(opts ListOptions) ([]*Repo, error) {
	var out []*Repo
	uri := fmt.Sprintf(pathReposAll, c.addr)
	if opt := encodeListOptions(opts); opt != "" {
		uri = uri + "?" + opt
	}
	err := c.get(uri, &out)
	return out, err
}
func (c *client) RepoEnable(owner, name string) (*Repo, error) {
	out := new(Repo)
	uri := fmt.Sprintf(pathRepo, c.addr, owner, name)
	err := c.post(uri, nil, out)
	return out, err
}
func (c *client) RepoDisable(owner, name string) error {
	uri := fmt.Sprintf(pathRepo, c.addr, owner, name)
	err := c.delete(uri)
	return err
}
func (c *client) RepoDelete(owner, name string) error {
	uri := fmt.Sprintf(pathRepo+"?remove=true", c.addr, owner, name)
	err := c.delete(uri)
	return err
}
func (c *client) RepoUpdate(owner, name string, in *RepoPatch) (*Repo, error) {
	out := new(Repo)
	uri := fmt.Sprintf(pathRepo, c.addr, owner, name)
	err := c.patch(uri, in, out)
	return out, err
}
func (c *client) RepoChown(owner, name string) (*Repo, error) {
	out := new(Repo)
	uri := fmt.Sprintf(pathChown, c.addr, owner, name)
	err := c.post(uri, nil, out)
	return out, err
}
func (c *client) RepoRepair(owner, name string) error {
	uri := fmt.Sprintf(pathRepair, c.addr, owner, name)
	return c.post(uri, nil, nil)
}
func (c *client) Build(owner, name string, num int) (*Build, error) {
	out := new(Build)
	uri := fmt.Sprintf(pathBuild, c.addr, owner, name, num)
	err := c.get(uri, out)
	return out, err
}
func (c *client) BuildLast(owner, name, branch string) (*Build, error) {
	out := new(Build)
	uri := fmt.Sprintf(pathBuild, c.addr, owner, name, "latest")
	if branch != "" {
		uri += "?branch=" + branch
	}
	err := c.get(uri, out)
	return out, err
}