From 9ecd6f85a11c42e5914eb52227f15c506e998432 Mon Sep 17 00:00:00 2001 From: Kirill Sukhorukov Date: Fri, 9 Feb 2024 09:44:36 +0300 Subject: [PATCH] Add functional options for MGClient --- v1/client.go | 34 ++++++++++++++++++++++++++++++++-- v1/client_test.go | 12 ++++-------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/v1/client.go b/v1/client.go index 3dd5273..cf0c487 100644 --- a/v1/client.go +++ b/v1/client.go @@ -14,16 +14,46 @@ import ( "github.com/google/go-querystring/query" ) +type Option func(*MgClient) + +// OptionHTTPClient set custom http.Client for MgClient +func OptionHTTPClient(client *http.Client) func(*MgClient) { + return func(c *MgClient) { + c.httpClient = client + } +} + +// OptionLogger sets the provided logger instance into the MgClient +func OptionLogger(logger BasicLogger) func(*MgClient) { + return func(c *MgClient) { + c.logger = logger + } +} + +// OptionDebug enables debug mode for MgClient +func OptionDebug() func(*MgClient) { + return func(c *MgClient) { + c.Debug = true + } +} + // New initialize client -func New(url string, token string) *MgClient { - return &MgClient{ +func New(url string, token string, opts ...Option) *MgClient { + c := &MgClient{ URL: url, Token: token, httpClient: &http.Client{Timeout: time.Minute}, } + + for _, opt := range opts { + opt(c) + } + + return c } // WithLogger sets the provided logger instance into the Client. +// Deprecated: Use functional option OptionLogger instead func (c *MgClient) WithLogger(logger BasicLogger) *MgClient { c.logger = logger return c diff --git a/v1/client_test.go b/v1/client_test.go index 292b34b..e3259b1 100644 --- a/v1/client_test.go +++ b/v1/client_test.go @@ -44,14 +44,12 @@ var ( debug, _ = strconv.ParseBool(os.Getenv("DEBUG")) ) -func client() *MgClient { - c := New(mgURL, mgToken) - +func client(opts ...Option) *MgClient { if debug != false { - c.Debug = true + opts = append(opts, OptionDebug()) } - return c + return New(mgURL, mgToken, opts...) } func TestMgClient_Bots(t *testing.T) { @@ -898,9 +896,7 @@ func TestMgClient_DebugWithLogger(t *testing.T) { var buf bytes.Buffer logger := log.New(&buf, "Custom log prefix ", 0) - c := client() - c.Debug = true - c.WithLogger(logger) + c := client(OptionDebug(), OptionLogger(logger)) c.writeLog("Test log string")