1
0
Fork 0

Option funcs

main v0.21.0
Jordan Hotmann 2024-01-04 09:38:38 -07:00
parent b8a82b0050
commit f281e82499
No known key found for this signature in database
GPG Key ID: 01B504170C2A2EA3
6 changed files with 105 additions and 73 deletions

View File

@ -9,7 +9,6 @@ import (
"code.jhot.me/jhot/hats/pkg/config" "code.jhot.me/jhot/hats/pkg/config"
n "code.jhot.me/jhot/hats/pkg/nats" n "code.jhot.me/jhot/hats/pkg/nats"
"github.com/nats-io/nats.go"
"github.com/nats-io/nats.go/jetstream" "github.com/nats-io/nats.go/jetstream"
) )
@ -31,11 +30,7 @@ func JetstreamConnect(parentContext context.Context, parentLogger *slog.Logger,
cfg = parentConfig cfg = parentConfig
var err error var err error
client = n.DefaultNatsConnection().WithHostName(cfg.NatsHost).WithPort(cfg.NatsPort).WithConnectionOption(nats.Name(cfg.NatsClientName)) client = n.New(n.WithHostName(cfg.NatsHost), n.WithPort(cfg.NatsPort), n.WithClientName(cfg.NatsClientName), n.WithToken(cfg.NatsToken))
if cfg.NatsToken != "" {
client.WithConnectionOption(nats.Token(cfg.NatsToken))
}
logger.Debug("Connecting to nats") logger.Debug("Connecting to nats")
err = client.Connect() err = client.Connect()

View File

@ -67,14 +67,9 @@ func New() (*HatsConfig, error) {
return cfg, fmt.Errorf("error logging in to Infisical: %w", err) return cfg, fmt.Errorf("error logging in to Infisical: %w", err)
} }
cfg.infisicalRetrievalOpts = &infisical.RetrieveSecretOptions{ secrets, err := cfg.infisicalClient.ListSecrets(
WorkspaceID: cfg.InfisicalProjectID, infisical.WithWorkspaceID(cfg.InfisicalProjectID),
Environment: cfg.InfisicalEnvironment, infisical.WithEnvironment(cfg.InfisicalEnvironment))
SecretPath: "/",
IncludeImports: false,
}
secrets, err := cfg.infisicalClient.ListSecrets(cfg.infisicalRetrievalOpts)
if err != nil { if err != nil {
return cfg, fmt.Errorf("error getting Infisical secrets: %w", err) return cfg, fmt.Errorf("error getting Infisical secrets: %w", err)
} }

View File

@ -56,6 +56,7 @@ var Services = struct {
Unlock string Unlock string
OpenCover string OpenCover string
CloseCover string CloseCover string
StopCover string
SelectOption string SelectOption string
SetHvacMode string SetHvacMode string
SetFanMode string SetFanMode string
@ -64,6 +65,7 @@ var Services = struct {
Start string Start string
Change string Change string
Cancel string Cancel string
SetCoverPosition string
}{ }{
TurnOn: "turn_on", TurnOn: "turn_on",
TurnOff: "turn_off", TurnOff: "turn_off",
@ -73,6 +75,7 @@ var Services = struct {
Unlock: "unlock", Unlock: "unlock",
OpenCover: "open_cover", OpenCover: "open_cover",
CloseCover: "close_cover", CloseCover: "close_cover",
StopCover: "stop_cover",
SelectOption: "select_option", SelectOption: "select_option",
SetHvacMode: "set_hvac_mode", SetHvacMode: "set_hvac_mode",
SetFanMode: "set_fan_mode", SetFanMode: "set_fan_mode",
@ -81,6 +84,7 @@ var Services = struct {
Start: "start", Start: "start",
Change: "change", Change: "change",
Cancel: "cancel", Cancel: "cancel",
SetCoverPosition: "set_cover_position",
} }
// Extra props that can be sent when calling a Home Assistant service // Extra props that can be sent when calling a Home Assistant service
@ -96,6 +100,7 @@ var ExtraProps = struct {
TargetTempLow string TargetTempLow string
Duration string Duration string
Value string Value string
Position string
}{ }{
Transition: "transition", Transition: "transition",
Brightness: "brightness", Brightness: "brightness",
@ -108,6 +113,7 @@ var ExtraProps = struct {
TargetTempLow: "target_temp_low", TargetTempLow: "target_temp_low",
Duration: "duration", Duration: "duration",
Value: "value", Value: "value",
Position: "position",
} }
type ResultContext struct { type ResultContext struct {

View File

@ -70,7 +70,12 @@ func (c *InfisicalClient) CheckToken() error {
return nil return nil
} }
func (c *InfisicalClient) ListSecrets(opts *RetrieveSecretOptions) ([]Secret, error) { func (c *InfisicalClient) ListSecrets(optFuncs ...RetrieveSecretOptionFunc) ([]Secret, error) {
opts := DefaultRetrieveSecretOptions()
for _, f := range optFuncs {
f(opts)
}
err := c.CheckToken() err := c.CheckToken()
if err != nil { if err != nil {
return []Secret{}, err return []Secret{}, err

View File

@ -23,24 +23,28 @@ func DefaultRetrieveSecretOptions() *RetrieveSecretOptions {
} }
} }
func (o *RetrieveSecretOptions) WithWorkspaceID(workspaceId string) *RetrieveSecretOptions { type RetrieveSecretOptionFunc func(*RetrieveSecretOptions)
o.WorkspaceID = workspaceId
return o func WithWorkspaceID(workspaceId string) RetrieveSecretOptionFunc {
return func(rso *RetrieveSecretOptions) {
rso.WorkspaceID = workspaceId
}
} }
func (o *RetrieveSecretOptions) WithEnvironment(environment string) *RetrieveSecretOptions { func WithEnvironment(environment string) RetrieveSecretOptionFunc {
o.Environment = environment return func(rso *RetrieveSecretOptions) {
return o rso.Environment = environment
}
} }
func (o *RetrieveSecretOptions) WithSecretPath(secretPath string) *RetrieveSecretOptions { func WithSecretPath(secretPath string) RetrieveSecretOptionFunc {
o.SecretPath = secretPath return func(rso *RetrieveSecretOptions) {
return o rso.SecretPath = secretPath
}
} }
func (o *RetrieveSecretOptions) WithImports(includeImports bool) *RetrieveSecretOptions { func WithImports(rso *RetrieveSecretOptions) {
o.IncludeImports = includeImports rso.IncludeImports = true
return o
} }
type Secret struct { type Secret struct {

View File

@ -30,28 +30,55 @@ func DefaultNatsConnection() *NatsConnection {
} }
} }
func (n *NatsConnection) WithHostName(hostname string) *NatsConnection { type NatsConnectionOption func(*NatsConnection)
n.HostName = hostname
return n func WithHostName(hostname string) NatsConnectionOption {
return func(nc *NatsConnection) {
nc.HostName = hostname
}
} }
func (n *NatsConnection) WithPort(port string) *NatsConnection { func WithPort(port string) NatsConnectionOption {
n.Port = port return func(nc *NatsConnection) {
return n nc.Port = port
}
} }
func (n *NatsConnection) WithJetstream(jetstream bool) *NatsConnection { func WithoutJetstream(nc *NatsConnection) {
n.UseJetstream = jetstream nc.UseJetstream = false
return n
} }
func (n *NatsConnection) WithConnectionOption(opt nats.Option) *NatsConnection { func WithClientName(name string) NatsConnectionOption {
n.connOpts = append(n.connOpts, opt) return func(nc *NatsConnection) {
return n nc.connOpts = append(nc.connOpts, nats.Name(name))
}
} }
func (n *NatsConnection) WithJetstreamOption(opt jetstream.JetStreamOpt) *NatsConnection { func WithToken(token string) NatsConnectionOption {
n.jetOpts = append(n.jetOpts, opt) return func(nc *NatsConnection) {
if token != "" {
nc.connOpts = append(nc.connOpts, nats.Token(token))
}
}
}
func WithConnectionOption(opt nats.Option) NatsConnectionOption {
return func(nc *NatsConnection) {
nc.connOpts = append(nc.connOpts, opt)
}
}
func WithJetstreamnOption(opt jetstream.JetStreamOpt) NatsConnectionOption {
return func(nc *NatsConnection) {
nc.jetOpts = append(nc.jetOpts, opt)
}
}
func New(optFuncs ...NatsConnectionOption) *NatsConnection {
n := DefaultNatsConnection()
for _, optFn := range optFuncs {
optFn(n)
}
return n return n
} }