diff --git a/bonsai/client.go b/bonsai/client.go index 42a13c9..6f3d17d 100644 --- a/bonsai/client.go +++ b/bonsai/client.go @@ -164,6 +164,18 @@ func WithProvisionRateLimit(l *rate.Limiter) ClientOption { } } +type PaginatedResponse struct { + PageNumber int `json:"page_number"` + PageSize int `json:"page_size"` + TotalRecords int `json:"total_records"` +} + +type Response struct { + *http.Response + + PaginatedResponse +} + type limiter = *rate.Limiter type ClientLimiter struct { // limiter is an embedded default rate limiter, but not exposed. @@ -182,6 +194,23 @@ type Client struct { userAgent string } +func NewClient(options ...ClientOption) *Client { + client := &Client{ + endpoint: BaseEndpoint, + httpClient: &http.Client{}, + rateLimiter: &ClientLimiter{ + limiter: rate.NewLimiter(rate.Every(DefaultClientBurstDuration), DefaultClientBurstAllowance), + provisionLimiter: rate.NewLimiter(rate.Every(ProvisionClientBurstDuration), ProvisionClientBurstAllowance), + }, + } + + for _, option := range options { + option(client) + } + + return client +} + func (c *Client) UserAgent() string { return c.userAgent } @@ -209,18 +238,6 @@ func (c *Client) NewRequest(ctx context.Context, method, path string, body io.Re return req, nil } -type PaginatedResponse struct { - PageNumber int `json:"page_number"` - PageSize int `json:"page_size"` - TotalRecords int `json:"total_records"` -} - -type Response struct { - *http.Response - - PaginatedResponse -} - // Do performs an HTTP request against the API. func (c *Client) Do(ctx context.Context, r *http.Request) (*Response, error) { reqBuf := new(bytes.Buffer) @@ -299,23 +316,6 @@ func (c *Client) Do(ctx context.Context, r *http.Request) (*Response, error) { } } -func NewClient(options ...ClientOption) *Client { - client := &Client{ - endpoint: BaseEndpoint, - httpClient: &http.Client{}, - rateLimiter: &ClientLimiter{ - limiter: rate.NewLimiter(rate.Every(DefaultClientBurstDuration), DefaultClientBurstAllowance), - provisionLimiter: rate.NewLimiter(rate.Every(ProvisionClientBurstDuration), ProvisionClientBurstAllowance), - }, - } - - for _, option := range options { - option(client) - } - - return client -} - // all loops through the next page pagination results until empty // it allows the caller to pass a func (typically a closure) to collect // results.