Provide fluent-style configuration methods as alternatives to the Set methods.
- Allows for quick and easy one-liners and also allows for temporarily changing configuration for a few requests. - Update example codes to promote usage of fluent-style configuration.api/rm-interface
parent
850e9e7bbf
commit
cb21cdb829
|
@ -26,11 +26,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Create client
|
// Create client (optionally with auth token)
|
||||||
client := new(footballdata.Client)
|
client := new(footballdata.Client).
|
||||||
|
WithToken("<insert your api token here>")
|
||||||
// Tell it to use our API token
|
|
||||||
client.SetToken("<insert your api token here>")
|
|
||||||
|
|
||||||
// Get list of seasons...
|
// Get list of seasons...
|
||||||
seasons, err := client.SoccerSeasons().Do()
|
seasons, err := client.SoccerSeasons().Do()
|
||||||
|
|
24
client.go
24
client.go
|
@ -16,7 +16,8 @@ Provides a high-level client implementation to talk to the API that football-dat
|
||||||
A new instance of Client will by default use the default HTTP client and no
|
A new instance of Client will by default use the default HTTP client and no
|
||||||
authentication token. To configure this, Client provides methods to set the
|
authentication token. To configure this, Client provides methods to set the
|
||||||
token and the HTTP client. For more information, see the respective documentation
|
token and the HTTP client. For more information, see the respective documentation
|
||||||
of SetHttpClient and SetToken.
|
of SetHttpClient and SetToken, or take a look at the fluent-style companion
|
||||||
|
methods WithHttpClient and WithToken.
|
||||||
*/
|
*/
|
||||||
type Client struct {
|
type Client struct {
|
||||||
httpClient http.Client
|
httpClient http.Client
|
||||||
|
@ -39,6 +40,15 @@ func (c *Client) SetToken(authToken string) {
|
||||||
c.authToken = authToken
|
c.authToken = authToken
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithToken sets the authentication token on a copy of the current Client
|
||||||
|
// instance.
|
||||||
|
//
|
||||||
|
// This method allows for easy fluent-style usage.
|
||||||
|
func (c Client) WithToken(authToken string) *Client {
|
||||||
|
c.authToken = authToken
|
||||||
|
return &c
|
||||||
|
}
|
||||||
|
|
||||||
// SetHttpClient sets the client that should be used to send out requests.
|
// SetHttpClient sets the client that should be used to send out requests.
|
||||||
// Calling this method is *optional*.
|
// Calling this method is *optional*.
|
||||||
func (c *Client) SetHttpClient(client *http.Client) {
|
func (c *Client) SetHttpClient(client *http.Client) {
|
||||||
|
@ -48,6 +58,18 @@ func (c *Client) SetHttpClient(client *http.Client) {
|
||||||
c.httpClient = *client
|
c.httpClient = *client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithHttpClient sets the client that should be used to send out requests on
|
||||||
|
// a copy of the current Client instance.
|
||||||
|
//
|
||||||
|
// This method allows for easy fluent-style usage.
|
||||||
|
func (c Client) WithHttpClient(client *http.Client) *Client {
|
||||||
|
if client == nil {
|
||||||
|
panic("client must not be nil")
|
||||||
|
}
|
||||||
|
c.httpClient = *client
|
||||||
|
return &c
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) req(path string, pathValues ...interface{}) request {
|
func (c *Client) req(path string, pathValues ...interface{}) request {
|
||||||
return request{c, fmt.Sprintf(path, pathValues...), url.Values{}}
|
return request{c, fmt.Sprintf(path, pathValues...), url.Values{}}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func Example() {
|
func Example() {
|
||||||
// Create client and tell it to use our API token
|
// Create client (optionally with auth token)
|
||||||
client := new(footballdata.Client)
|
client := new(footballdata.Client).
|
||||||
|
WithToken("<insert your api token here>")
|
||||||
// Tell it to use our API token (optional)
|
|
||||||
client.SetToken("<insert your api token here>")
|
|
||||||
|
|
||||||
// Get list of seasons...
|
// Get list of seasons...
|
||||||
seasons, err := client.SoccerSeasons().Do()
|
seasons, err := client.SoccerSeasons().Do()
|
||||||
|
@ -27,8 +25,9 @@ func Example() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExampleClient() {
|
func ExampleClient() {
|
||||||
// Create client
|
// Create client (optionally with auth token)
|
||||||
client := footballdata.NewClient(http.DefaultClient)
|
client := new(footballdata.Client).
|
||||||
|
WithToken("<insert your api token here>")
|
||||||
|
|
||||||
// Tell it to use our API token (optional)
|
// Tell it to use our API token (optional)
|
||||||
client.SetToken("<insert your api token here>")
|
client.SetToken("<insert your api token here>")
|
||||||
|
@ -57,3 +56,16 @@ func ExampleClient_setTokenAndHttpClient() {
|
||||||
DisableCompression: true,
|
DisableCompression: true,
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleClient_withCustomConfiguration() {
|
||||||
|
// Create client with custom token and wrapping a custom HTTP client
|
||||||
|
client := new(footballdata.Client).
|
||||||
|
WithToken("<insert your api token here>").
|
||||||
|
WithHttpClient(&http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
DisableCompression: true,
|
||||||
|
}})
|
||||||
|
|
||||||
|
// Do something with the client instance here...
|
||||||
|
_ = client
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue