package zolatakehome /** * Generated by API Builder - https://www.apibuilder.io * Service version: 1.0.0-dev * User agent: apibuilder app.apibuilder.io/helicalmoment/zola-takehome/1.0.0-dev/go_1_5_client */ import ( "bytes" "encoding/json" "errors" "fmt" "io" "net/http" "net/url" "strconv" ) const BaseUrl = "localhost" const UserAgent = "apibuilder app.apibuilder.io/helicalmoment/zola-takehome/1.0.0-dev/go_1_5_client" const Version = "1.0.0-dev" const VersionMajor = 1 type Client struct { HttpClient *http.Client Username string Password string BaseUrl string Headers http.Header } type ClientRequestBody struct { contentType string bytes io.Reader } /** * An invoice */ type Invoice struct { Id int32 `json:"id,omitempty"` InvoiceNumber string `json:"invoice_number"` PoNumber string `json:"po_number"` DueDate string `json:"due_date"` AmountCents int64 `json:"amount_cents"` CreatedAt string `json:"created_at,omitempty"` } func InvoiceFromMap(data interface{}) Invoice { b, err := json.Marshal(data) if err == nil { return InvoiceFromJson(bytes.NewReader(b)) } else { panic(err) } } func InvoiceFromJson(bytes io.Reader) Invoice { var invoice Invoice json.NewDecoder(bytes).Decode(&invoice) return invoice } type InvoicesPutResponse struct { StatusCode int Response *http.Response Error error Invoice Invoice } func InvoicesPut(client Client, invoice Invoice) InvoicesPutResponse { requestUrl := fmt.Sprintf("%s/v1/invoices", client.BaseUrl) bodyDocument, err := json.Marshal(invoice) if err != nil { return InvoicesPutResponse{Error: err} } body := ClientRequestBody{contentType: "application/json", bytes: bytes.NewReader(bodyDocument)} request, err := buildRequest(client, "PUT", requestUrl, body) if err != nil { return InvoicesPutResponse{Error: err} } resp, err := client.HttpClient.Do(request) if err != nil { return InvoicesPutResponse{Error: err} } defer resp.Body.Close() switch resp.StatusCode { case 201: return InvoicesPutResponse{StatusCode: resp.StatusCode, Response: resp, Invoice: InvoiceFromJson(resp.Body)} default: return InvoicesPutResponse{StatusCode: resp.StatusCode, Response: resp, Error: errors.New(resp.Status)} } } type InvoicesGetParams struct { InvoiceNumber string PoNumber string Limit int32 Offset int32 } type InvoicesGetResponse struct { StatusCode int Response *http.Response Error error Invoices []Invoice } func InvoicesGet(client Client, params InvoicesGetParams) InvoicesGetResponse { requestUrl := fmt.Sprintf("%s/v1/invoices", client.BaseUrl) urlValues := url.Values{} if "" != params.InvoiceNumber { urlValues.Add("invoice_number", params.InvoiceNumber) } if "" != params.PoNumber { urlValues.Add("po_number", params.PoNumber) } if 0 != params.Limit { urlValues.Add("limit", strconv.FormatInt(params.Limit, 10)) } if 0 != params.Offset { urlValues.Add("offset", strconv.FormatInt(params.Offset, 10)) } encodedValues := urlValues.Encode() if encodedValues != "" { requestUrl += "?" + encodedValues } request, err := buildRequest(client, "GET", requestUrl, ClientRequestBody{}) if err != nil { return InvoicesGetResponse{Error: err} } resp, err := client.HttpClient.Do(request) if err != nil { return InvoicesGetResponse{Error: err} } defer resp.Body.Close() switch resp.StatusCode { case 200: return InvoicesGetResponse{StatusCode: resp.StatusCode, Response: resp, Invoices: func() []Invoice { var tmp []interface{} json.NewDecoder(resp.Body).Decode(&tmp) var all []Invoice for _, el := range tmp { all = append(all, InvoiceFromMap(el)) } return all }()} default: return InvoicesGetResponse{StatusCode: resp.StatusCode, Response: resp, Error: errors.New(resp.Status)} } } func buildRequest(client Client, method, urlStr string, body ClientRequestBody) (*http.Request, error) { request, err := http.NewRequest(method, urlStr, body.bytes) if err != nil { return nil, err } request.Header.Add("User-Agent", UserAgent) request.Header.Add("X-Apidoc-Version", Version) request.Header.Add("X-Apidoc-Version-Major", strconv.Itoa(VersionMajor)) if client.Headers != nil { for key, values := range client.Headers { for _, value := range values { request.Header.Add(key, value) } } } if body.contentType != "" { request.Header.Add("Content-Type", body.contentType) } if client.Username != "" { request.SetBasicAuth(client.Username, client.Password) } return request, nil }