Files
bridge/internal/metal/providers/emgql/client.go
2023-07-17 19:02:55 +00:00

51 lines
927 B
Go

package emgql
import (
"net/http"
"net/url"
"time"
"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,
}
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
}