Loading...
Loading...
Expert in generating functional options for Go structs using the options-gen library.
npx skill4agent add metalagman/agent-skills go-options-genoptions-genoptions.gooptions_generated.goMyServiceMyServiceOptionsmyservice_options.gomyservice_options_generated.gogo tool options-gengo.modgo get -tool github.com/kazhuravlev/options-gen/cmd/options-gen@latestgo-playground/validatorValidate()optsgo get -tool github.com/kazhuravlev/options-gen/cmd/options-gen@latestoptions.go//go:generatepackage mypackage
import "time"
//go:generate go tool options-gen -from-struct=Options -out-filename=options_generated.go
type Options struct {
timeout time.Duration `option:"mandatory" validate:"required"`
maxRetries int `default:"3" validate:"min=1"`
endpoints []string `option:"variadic=true"`
}go generate ./options.gooptstype Component struct {
opts Options
}
func New(setters ...OptionOptionsSetter) (*Component, error) {
opts := NewOptions(setters...)
if err := opts.Validate(); err != nil {
return nil, fmt.Errorf("invalid options: %w", err)
}
return &Component{opts: opts}, nil
}option:"mandatory"NewOptions()default:"value"options-gentime.Duration-defaults-from=func//go:generate go tool options-gen -from-struct=Options -out-filename=options_generated.go -defaults-from=func
func defaultOptions() Options {
return Options{
headers: map[string]string{"User-Agent": "my-client"},
}
}validate:"required"validate:"oneof=tcp udp"validate:"min=1"option:"variadic=true"WithEndpoints("a", "b")WithEndpoints([]string{"a", "b"})options.goWith*ClientServer<prefix>_options.go<prefix>_options_generated.go-out-prefixNewOptionsOption...SetterMyServicemyservice_options.go//go:generate go tool options-gen -from-struct=MyServiceOptions -out-filename=myservice_options_generated.go -out-prefix=MyService
type MyServiceOptions struct {
timeout time.Duration `option:"mandatory"`
}NewMyServiceOptionsOptionMyServiceOptionsSetter