diff --git a/exchanges/exchange.go b/exchanges/exchange.go index a8065ac0..82b3ba20 100644 --- a/exchanges/exchange.go +++ b/exchanges/exchange.go @@ -21,6 +21,7 @@ import ( "github.com/thrasher-corp/gocryptotrader/exchanges/margin" "github.com/thrasher-corp/gocryptotrader/exchanges/order" "github.com/thrasher-corp/gocryptotrader/exchanges/protocol" + "github.com/thrasher-corp/gocryptotrader/exchanges/request" "github.com/thrasher-corp/gocryptotrader/exchanges/stream" "github.com/thrasher-corp/gocryptotrader/exchanges/trade" "github.com/thrasher-corp/gocryptotrader/log" @@ -47,6 +48,16 @@ var ( errSymbolCannotBeMatched = errors.New("symbol cannot be matched") ) +// SetRequester sets the instance of the requester +func (b *Base) SetRequester(r *request.Requester) error { + if r == nil { + return fmt.Errorf("%s cannot set requester, no requester provided", b.Name) + } + + b.Requester = r + return nil +} + // SetClientProxyAddress sets a proxy address for REST and websocket requests func (b *Base) SetClientProxyAddress(addr string) error { if addr == "" { diff --git a/exchanges/exchange_test.go b/exchanges/exchange_test.go index 6415d85e..a67a8171 100644 --- a/exchanges/exchange_test.go +++ b/exchanges/exchange_test.go @@ -2616,3 +2616,31 @@ func TestGetPairAndAssetTypeRequestFormatted(t *testing.T) { t.Fatalf("received: '%v' but expected: '%v'", p, expected) } } + +func TestSetRequester(t *testing.T) { + t.Parallel() + + b := Base{ + Config: &config.Exchange{Name: "kitties"}, + Requester: nil, + } + + err := b.SetRequester(nil) + if err == nil { + t.Fatal("error cannot be nil") + } + + requester, err := request.New("testingRequester", common.NewHTTPClientWithTimeout(0)) + if err != nil { + t.Fatal(err) + } + + err = b.SetRequester(requester) + if err != nil { + t.Fatalf("expected no error, received %v", err) + } + + if b.Requester == nil { + t.Fatal("requester not set correctly") + } +}