package emgql import ( "net/http" "net/url" "time" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" "go.equinixmetal.net/infra9-metal-bridge/internal/metal/providers" ) const ( defaultHTTPTimeout = 5 * time.Second ) // DefaultHTTPClient is the default http client used if no client is provided. var DefaultHTTPClient = &http.Client{ Timeout: defaultHTTPTimeout, Transport: otelhttp.NewTransport(http.DefaultTransport), } var _ providers.Provider = &Client{} // Client is the client to interact with the equinix metal graphql service. type Client struct { logger *zap.SugaredLogger httpClient *http.Client baseURL *url.URL } // New creates a new emapi client func New(options ...Option) (*Client, error) { client := &Client{} for _, opt := range options { if err := opt(client); err != nil { return nil, err } } if client.logger == nil { client.logger = zap.NewNop().Sugar() } if client.httpClient == nil { client.httpClient = DefaultHTTPClient } return client, nil }