package spot import ( "context" "encoding/json" "net/http" "google.golang.org/grpc" ) var defaultResolvers = []string{ "http://apresolve.spotify.com", } type Client struct { Resolver string Endpoints ApResolve grpc *grpc.ClientConn } type ApResolve struct { ApList []string `json:"ap_list"` } func NewClient(resolver string) (*Client, error) { c := &Client{Resolver: resolver} err := c.discover() if err != nil { return nil, err } return c, nil } func (c *Client) Connect(ctx context.Context) error { conn, err := grpc.DialContext(ctx, c.Endpoints.ApList[0]) if err != nil { return err } c.grpc = conn return nil } func (c *Client) discover() error { resp, err := http.Get(c.Resolver) if err != nil { return err } defer resp.Body.Close() return json.NewDecoder(resp.Body).Decode(&c.Endpoints) }