From a7fab72a1e26dbf33aec6e51d42cf817773c8e7f Mon Sep 17 00:00:00 2001 From: Ryan Cavicchioni Date: Thu, 11 Feb 2021 09:16:24 -0600 Subject: [PATCH] Use functional options for the client constructor --- client.go | 19 ++++++++++++++++--- cmd/main.go | 5 ++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/client.go b/client.go index 90a39e8..68274c9 100644 --- a/client.go +++ b/client.go @@ -71,15 +71,28 @@ var errorMap = map[int]error{ 523: errors.New("Something went wrong on LIFX's end"), } -func NewClient(accessToken string) *Client { +func NewClient(accessToken string, options ...func(*Client)) *Client { + var c *Client tr := &http.Transport{ //TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper), } - return &Client{ + + c = &Client{ accessToken: accessToken, - userAgent: defaultUserAgent, Client: &http.Client{Transport: tr}, } + + for _, option := range options { + option(c) + } + + return c +} + +func WithUserAgent(userAgent string) func(*Client) { + return func(c *Client) { + c.userAgent = userAgent + } } func NewClientWithUserAgent(accessToken string, userAgent string) *Client { diff --git a/cmd/main.go b/cmd/main.go index af88bbd..1cb2eef 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -223,7 +223,10 @@ func Main(args []string) (int, error) { command := args[1] - c := lifx.NewClientWithUserAgent(config.AccessToken, userAgent) + c := lifx.NewClient( + config.AccessToken, + lifx.WithUserAgent(userAgent), + ) cmdArgs := CmdArgs{ Client: c,