orchard/pkg/client/option.go

60 lines
1.2 KiB
Go

package client
import (
"crypto/x509"
"fmt"
"strings"
"github.com/cirruslabs/orchard/internal/dialer"
v1 "github.com/cirruslabs/orchard/pkg/resource/v1"
)
type Option func(*Client)
func WithAddress(address string) Option {
return func(client *Client) {
client.address = address
}
}
func WithTrustedCertificate(trustedCertificate *x509.Certificate) Option {
return func(client *Client) {
client.trustedCertificate = trustedCertificate
}
}
func WithCredentials(serviceAccountName string, serviceAccountToken string) Option {
return func(client *Client) {
client.serviceAccountName = serviceAccountName
client.serviceAccountToken = serviceAccountToken
}
}
func WithDialer(dialer dialer.Dialer) Option {
return func(client *Client) {
client.dialer = dialer
}
}
type ListInput struct {
Filters []v1.Filter
}
type ListOption func(params map[string]string)
func WithListFilters(filters ...v1.Filter) ListOption {
return func(params map[string]string) {
if len(filters) == 0 {
return
}
var pairs []string
for _, filter := range filters {
pairs = append(pairs, fmt.Sprintf("%s=%s", filter.Path, filter.Value))
}
params["filter"] = strings.Join(pairs, ",")
}
}