-
Notifications
You must be signed in to change notification settings - Fork 2
/
option.go
55 lines (45 loc) · 1.44 KB
/
option.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package apple
import "net/http"
// ClientSettings represents settings for creation of new client.
type ClientSettings struct {
HTTPClient *http.Client
TokenTTL *int64
RedirectURI *string
TeamID string
ClientID string
KeyID string
}
// ClientOption is an interface for applying client options.
type ClientOption interface {
Apply(*ClientSettings)
}
// ClientOptionFunc implements ClientOption interface using func trick.
type ClientOptionFunc func(*ClientSettings)
// Apply applies changes for ClientSettings.
func (f ClientOptionFunc) Apply(settings *ClientSettings) { f(settings) }
// WithHTTPClient sets specified client to ClientOptions.
func WithHTTPClient(client *http.Client) ClientOption {
return ClientOptionFunc(func(settings *ClientSettings) {
settings.HTTPClient = client
})
}
// WithTokenTTL sets specified ttl to ClientOptions.
func WithTokenTTL(ttl int64) ClientOption {
return ClientOptionFunc(func(settings *ClientSettings) {
settings.TokenTTL = &ttl
})
}
// WithRedirectURI sets specified uri to ClientOptions.
func WithRedirectURI(uri string) ClientOption {
return ClientOptionFunc(func(settings *ClientSettings) {
settings.RedirectURI = &uri
})
}
// WithCredentials sets specified creds to ClientOptions.
func WithCredentials(teamID, clientID, keyID string) ClientOption {
return ClientOptionFunc(func(settings *ClientSettings) {
settings.TeamID = teamID
settings.ClientID = clientID
settings.KeyID = keyID
})
}