package options type KeyGenerateSettings struct { Algorithm string Size int } type KeyRenameSettings struct { Force bool } type KeyGenerateOption func(*KeyGenerateSettings) error type KeyRenameOption func(*KeyRenameSettings) error func KeyGenerateOptions(opts ...KeyGenerateOption) (*KeyGenerateSettings, error) { options := &KeyGenerateSettings{ Algorithm: "rsa", Size: 0, } for _, opt := range opts { err := opt(options) if err != nil { return nil, err } } return options, nil } func KeyRenameOptions(opts ...KeyRenameOption) (*KeyRenameSettings, error) { options := &KeyRenameSettings{ Force: false, } for _, opt := range opts { err := opt(options) if err != nil { return nil, err } } return options, nil } type KeyOptions struct{} func (api *KeyOptions) WithAlgorithm(algorithm string) KeyGenerateOption { return func(settings *KeyGenerateSettings) error { settings.Algorithm = algorithm return nil } } func (api *KeyOptions) WithSize(size int) KeyGenerateOption { return func(settings *KeyGenerateSettings) error { settings.Size = size return nil } } func (api *KeyOptions) WithForce(force bool) KeyRenameOption { return func(settings *KeyRenameSettings) error { settings.Force = force return nil } }