Documentation
¶
Index ¶
- func EncodeURL(urlFormat string, args ...interface{}) string
- func ExtractExtraProperties(bytes []byte, value interface{}, exclude ...string) (map[string]interface{}, error)
- func MarshalJSONWithExtraProperties(marshaler interface{}, extraProperties map[string]interface{}) ([]byte, error)
- func MarshalJSONWithExtraProperty(marshaler interface{}, key string, value interface{}) ([]byte, error)
- func MergeHeaders(left, right http.Header) http.Header
- func QueryValues(v interface{}) (url.Values, error)
- func ResolveBaseURL(values ...string) string
- func StringifyJSON(value interface{}) (string, error)
- type CallParams
- type Caller
- type CallerParams
- type ContentTyped
- type Date
- type DateTime
- type ErrorCodes
- type ErrorDecoder
- type HTTPClient
- type MultipartWriter
- func (w *MultipartWriter) Buffer() *bytes.Buffer
- func (w *MultipartWriter) Close() error
- func (w *MultipartWriter) ContentType() string
- func (w *MultipartWriter) WriteField(field string, value string, opts ...WriteMultipartOption) error
- func (w *MultipartWriter) WriteFile(field string, file io.Reader, opts ...WriteMultipartOption) error
- func (w *MultipartWriter) WriteJSON(field string, value interface{}, opts ...WriteMultipartOption) error
- type Named
- type PageRequest
- type PageRequestFunc
- type PageResponse
- type PageResponseFunc
- type Pager
- func NewCursorPager[Cursor comparable, Response any, Results any](caller *Caller, prepareCall PageRequestFunc[Cursor], ...) *Pager[Cursor, Response, Results]
- func NewOffsetPager[Cursor comparable, Response any, Results any](caller *Caller, prepareCall PageRequestFunc[Cursor], ...) *Pager[Cursor, Response, Results]
- type PagerMode
- type QueryEncoder
- type Retrier
- type RetryFunc
- type RetryOption
- type WriteMultipartOption
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ExtractExtraProperties ¶
func ExtractExtraProperties(bytes []byte, value interface{}, exclude ...string) (map[string]interface{}, error)
ExtractExtraProperties extracts any extra properties from the given value.
func MarshalJSONWithExtraProperties ¶
func MarshalJSONWithExtraProperties(marshaler interface{}, extraProperties map[string]interface{}) ([]byte, error)
MarshalJSONWithExtraProperties marshals the given value to JSON, including any extra properties.
func MarshalJSONWithExtraProperty ¶
func MarshalJSONWithExtraProperty(marshaler interface{}, key string, value interface{}) ([]byte, error)
MarshalJSONWithExtraProperty marshals the given value to JSON, including the extra property.
func MergeHeaders ¶
MergeHeaders merges the given headers together, where the right takes precedence over the left.
func QueryValues ¶
QueryValues encodes url.Values from request objects.
Note: This type is inspired by Google's query encoding library, but supports far less customization and is tailored to fit this SDK's use case.
func ResolveBaseURL ¶
ResolveBaseURL resolves the base URL from the given arguments, preferring the first non-empty value.
func StringifyJSON ¶
StringifyJSON returns a pretty JSON string representation of the given value.
Types ¶
type CallParams ¶
type CallParams struct { URL string Method string MaxAttempts uint Headers http.Header BodyProperties map[string]interface{} QueryParameters url.Values Client core.HTTPClient Request interface{} Response interface{} ResponseIsOptional bool ErrorDecoder ErrorDecoder }
CallParams represents the parameters used to issue an API call.
type Caller ¶
type Caller struct {
// contains filtered or unexported fields
}
Caller calls APIs and deserializes their response, if any.
func NewCaller ¶
func NewCaller(params *CallerParams) *Caller
NewCaller returns a new *Caller backed by the given parameters.
type CallerParams ¶
type CallerParams struct { Client core.HTTPClient MaxAttempts uint }
CallerParams represents the parameters used to constrcut a new *Caller.
type ContentTyped ¶
type ContentTyped interface {
ContentType() string
}
ContentTyped is implemented by types that define a Content-Type.
type Date ¶
type Date struct {
// contains filtered or unexported fields
}
DateTime wraps time.Time and adapts its JSON representation to conform to a RFC3339 date (e.g. 2006-01-02).
Ref: https://ijmacd.github.io/rfc3339-iso8601
func NewOptionalDate ¶
NewOptionalDate returns a new *Date. If the given time.Time is nil, nil will be returned.
func (*Date) MarshalJSON ¶
func (*Date) Time ¶
Time returns the Date's underlying time, if any. If the date is nil, the zero value is returned.
func (*Date) UnmarshalJSON ¶
type DateTime ¶
type DateTime struct {
// contains filtered or unexported fields
}
DateTime wraps time.Time and adapts its JSON representation to conform to a RFC3339 date-time (e.g. 2017-07-21T17:32:28Z).
Ref: https://ijmacd.github.io/rfc3339-iso8601
func NewOptionalDateTime ¶
NewOptionalDateTime returns a new *DateTime. If the given time.Time is nil, nil will be returned.
func (*DateTime) MarshalJSON ¶
func (*DateTime) Time ¶
Time returns the DateTime's underlying time, if any. If the date-time is nil, the zero value is returned.
func (*DateTime) TimePtr ¶
TimePtr returns a pointer to the DateTime's underlying time.Time, if any.
func (*DateTime) UnmarshalJSON ¶
type ErrorCodes ¶
ErrorCodes maps HTTP status codes to error constructors.
type ErrorDecoder ¶
ErrorDecoder decodes *http.Response errors and returns a typed API error (e.g. *core.APIError).
func NewErrorDecoder ¶
func NewErrorDecoder(errorCodes ErrorCodes) ErrorDecoder
NewErrorDecoder returns a new ErrorDecoder backed by the given error codes.
type HTTPClient ¶
HTTPClient is an interface for a subset of the *http.Client.
type MultipartWriter ¶
type MultipartWriter struct {
// contains filtered or unexported fields
}
MultipartWriter writes multipart/form-data requests.
func NewMultipartWriter ¶
func NewMultipartWriter() *MultipartWriter
NewMultipartWriter creates a new multipart writer.
func (*MultipartWriter) Buffer ¶
func (w *MultipartWriter) Buffer() *bytes.Buffer
Buffer returns the underlying buffer.
func (*MultipartWriter) ContentType ¶
func (w *MultipartWriter) ContentType() string
ContentType returns the Content-Type for an HTTP multipart/form-data.
func (*MultipartWriter) WriteField ¶
func (w *MultipartWriter) WriteField( field string, value string, opts ...WriteMultipartOption, ) error
WriteField writes the given value as a form field.
func (*MultipartWriter) WriteFile ¶
func (w *MultipartWriter) WriteFile( field string, file io.Reader, opts ...WriteMultipartOption, ) error
WriteFile writes the given file part.
func (*MultipartWriter) WriteJSON ¶
func (w *MultipartWriter) WriteJSON( field string, value interface{}, opts ...WriteMultipartOption, ) error
WriteJSON writes the given value as a JSON form field.
type Named ¶
type Named interface {
Name() string
}
Named is implemented by types that define a name.
type PageRequest ¶
type PageRequest[Cursor comparable] struct { Cursor Cursor // Holds the value of the response type (populated by the *Caller). Response any }
PageRequest represents the information required to identify a single page.
type PageRequestFunc ¶
type PageRequestFunc[Cursor comparable] func(request *PageRequest[Cursor]) *CallParams
PageRequestFunc prepares the *CallParams from the given page request.
type PageResponse ¶
type PageResponse[Cursor comparable, Result any] struct { Results []Result Next Cursor Done bool }
PageResponse represents the information associated with a single page.
type PageResponseFunc ¶
type PageResponseFunc[ Cursor comparable, Response any, Results any, ] func(Response) *PageResponse[Cursor, Results]
PageResponseFunc extracts the next page information from the response.
type Pager ¶
type Pager[ Cursor comparable, Response any, Results any, ] struct { // contains filtered or unexported fields }
Pager is the primary abstraction used to call paginated APIs.
func NewCursorPager ¶
func NewCursorPager[Cursor comparable, Response any, Results any]( caller *Caller, prepareCall PageRequestFunc[Cursor], readPageResponse PageResponseFunc[Cursor, Response, Results], ) *Pager[Cursor, Response, Results]
NewCursorPager constructs a new Pager that fetches pages from a paginated endpoint.
func NewOffsetPager ¶
func NewOffsetPager[Cursor comparable, Response any, Results any]( caller *Caller, prepareCall PageRequestFunc[Cursor], readPageResponse PageResponseFunc[Cursor, Response, Results], ) *Pager[Cursor, Response, Results]
NewOffsetPager constructs a new Pager that fetches pages from an offset paginated endpoint.
type QueryEncoder ¶
QueryEncoder is an interface implemented by any type that wishes to encode itself into URL values in a non-standard way.
type Retrier ¶
type Retrier struct {
// contains filtered or unexported fields
}
Retrier retries failed requests a configurable number of times with an exponential back-off between each retry.
func NewRetrier ¶
func NewRetrier(opts ...RetryOption) *Retrier
NewRetrier constructs a new *Retrier with the given options, if any.
func (*Retrier) Run ¶
func (r *Retrier) Run( fn RetryFunc, request *http.Request, errorDecoder ErrorDecoder, opts ...RetryOption, ) (*http.Response, error)
Run issues the request and, upon failure, retries the request if possible.
The request will be retried as long as the request is deemed retryable and the number of retry attempts has not grown larger than the configured retry limit.
type RetryOption ¶
type RetryOption func(*retryOptions)
RetryOption adapts the behavior the *Retrier.
func WithMaxAttempts ¶
func WithMaxAttempts(attempts uint) RetryOption
WithMaxAttempts configures the maximum number of attempts of the *Retrier.
type WriteMultipartOption ¶
type WriteMultipartOption func(*writeMultipartOptions)
WriteMultipartOption adapts the behavior of the multipart writer.
func WithDefaultContentType ¶
func WithDefaultContentType(contentType string) WriteMultipartOption
WithDefaultContentType sets the default Content-Type for the part written to the MultipartWriter.
Note that if the part is a FileParam, the file's Content-Type takes precedence over the value provided here.