initial commit
This commit is contained in:
90
internal/service/options.go
Normal file
90
internal/service/options.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"go.infratographer.com/x/gidx"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"go.equinixmetal.net/infra9-metal-bridge/internal/metal"
|
||||
"go.equinixmetal.net/infra9-metal-bridge/internal/permissions"
|
||||
)
|
||||
|
||||
// Option defines a service option.
|
||||
type Option func(s *service) error
|
||||
|
||||
// WithLogger sets the logger for the service handler.
|
||||
func WithLogger(logger *zap.SugaredLogger) Option {
|
||||
return func(s *service) error {
|
||||
s.logger = logger
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithMetalClient sets the Equinix Metal client used by the service.
|
||||
func WithMetalClient(client *metal.Client) Option {
|
||||
return func(s *service) error {
|
||||
s.metal = client
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithPermissionsClient sets the permissions client used by the service.
|
||||
func WithPermissionsClient(client *permissions.Client) Option {
|
||||
return func(s *service) error {
|
||||
s.perms = client
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithPrefixMap sets the id prefix map relating id prefixes to type names.
|
||||
func WithPrefixMap(idMap map[string]string) Option {
|
||||
return func(s *service) error {
|
||||
s.idPrefixMap = idMap
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithRootTenant sets the root tenant referenced in organization relationships.
|
||||
func WithRootTenant(sid string) Option {
|
||||
return func(s *service) error {
|
||||
id, err := gidx.Parse(sid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.rootResource = rootResource{id}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithRoles defines the role to action mapping.
|
||||
func WithRoles(roles map[string][]string) Option {
|
||||
return func(s *service) error {
|
||||
s.roles = roles
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithConfig applies all configurations defined in the config.
|
||||
func WithConfig(config Config) Option {
|
||||
return func(s *service) error {
|
||||
var options []Option
|
||||
|
||||
if config.RootTenant != "" {
|
||||
options = append(options, WithRootTenant(config.RootTenant))
|
||||
}
|
||||
|
||||
for _, opt := range options {
|
||||
if err := opt(s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user