This repository has been archived on 2023-04-13. You can view files and clone it, but cannot push or open issues or pull requests.
go-discogs/discogs.go
2018-02-20 18:13:04 +03:00

73 lines
1.6 KiB
Go

package discogs
import (
"fmt"
"net/http"
"github.com/irlndts/go-apirequest"
)
const (
discogsAPI = "https://api.discogs.com/"
)
type Options struct {
Currency string
UserAgent string
}
// Client is a Discogs client for making Discogs API requests.
type Client struct {
api *apirequest.API
currency string
// services
Release *ReleaseService
Master *MasterService
Artist *ArtistService
Label *LabelService
Search *SearchService
}
// NewClient returns a new Client.
func NewClient(o *Options) (*Client, error) {
base := apirequest.New().Client(&http.Client{}).Base(discogsAPI)
if o.UserAgent != "" {
base.Set("User-Agent", o.UserAgent)
}
cur, err := currency(o.Currency)
if err != nil {
return nil, err
}
return &Client{
api: base,
Release: newReleaseService(base.New(), cur),
Artist: newArtistService(base.New()),
Label: newLabelService(base.New()),
Master: newMasterService(base.New()),
Search: newSearchService(base.New()),
}, nil
}
// Token sets tokens, it's required for some queries like search
func (c *Client) Token(token string) *Client {
c.api.Set("Authorization", "Discogs token="+token)
return c
}
// currency validates currency for marketplace data.
// Defaults to the authenticated users currency. Must be one of the following:
// USD GBP EUR CAD AUD JPY CHF MXN BRL NZD SEK ZAR
func currency(c string) (string, error) {
switch c {
case "USD", "GBP", "EUR", "CAD", "AUD", "JPY", "CHF", "MXN", "BRL", "NZD", "SEK", "ZAR":
return c, nil
default:
return "", fmt.Errorf("%v\n", "Invalid currency abbreviation.")
}
return "USD", nil
}