Add functional options for MGClient

This commit is contained in:
Kirill Sukhorukov 2024-02-09 09:44:36 +03:00
parent 4058284e32
commit 9ecd6f85a1
2 changed files with 36 additions and 10 deletions

View File

@ -14,16 +14,46 @@ import (
"github.com/google/go-querystring/query" "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 // New initialize client
func New(url string, token string) *MgClient { func New(url string, token string, opts ...Option) *MgClient {
return &MgClient{ c := &MgClient{
URL: url, URL: url,
Token: token, Token: token,
httpClient: &http.Client{Timeout: time.Minute}, httpClient: &http.Client{Timeout: time.Minute},
} }
for _, opt := range opts {
opt(c)
}
return c
} }
// WithLogger sets the provided logger instance into the Client. // WithLogger sets the provided logger instance into the Client.
// Deprecated: Use functional option OptionLogger instead
func (c *MgClient) WithLogger(logger BasicLogger) *MgClient { func (c *MgClient) WithLogger(logger BasicLogger) *MgClient {
c.logger = logger c.logger = logger
return c return c

View File

@ -44,14 +44,12 @@ var (
debug, _ = strconv.ParseBool(os.Getenv("DEBUG")) debug, _ = strconv.ParseBool(os.Getenv("DEBUG"))
) )
func client() *MgClient { func client(opts ...Option) *MgClient {
c := New(mgURL, mgToken)
if debug != false { if debug != false {
c.Debug = true opts = append(opts, OptionDebug())
} }
return c return New(mgURL, mgToken, opts...)
} }
func TestMgClient_Bots(t *testing.T) { func TestMgClient_Bots(t *testing.T) {
@ -898,9 +896,7 @@ func TestMgClient_DebugWithLogger(t *testing.T) {
var buf bytes.Buffer var buf bytes.Buffer
logger := log.New(&buf, "Custom log prefix ", 0) logger := log.New(&buf, "Custom log prefix ", 0)
c := client() c := client(OptionDebug(), OptionLogger(logger))
c.Debug = true
c.WithLogger(logger)
c.writeLog("Test log string") c.writeLog("Test log string")