48 lines
869 B
Go
48 lines
869 B
Go
package scryfall
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
const SCRYFALL_API_URL string = "https://api.scryfall.com/"
|
|
|
|
type ScryfallClient struct {
|
|
baseURL string
|
|
httpClient *http.Client
|
|
}
|
|
type ScryfallClientOption func(*ScryfallClient) error
|
|
|
|
func NewScryfallClient(options ...ScryfallClientOption) (*ScryfallClient, error) {
|
|
client := &ScryfallClient{
|
|
baseURL: SCRYFALL_API_URL,
|
|
httpClient: &http.Client{
|
|
Timeout: time.Second * 30,
|
|
},
|
|
}
|
|
|
|
if err := client.parseOptions(options...); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return client, nil
|
|
}
|
|
|
|
func BaseURL(baseURL string) ScryfallClientOption {
|
|
return func(c *ScryfallClient) error {
|
|
c.baseURL = baseURL
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func (c *ScryfallClient) parseOptions(options ...ScryfallClientOption) error {
|
|
for _, option := range options {
|
|
err := option(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|