diff --git a/cmd/add.go b/cmd/add.go index a0867d0..830ff12 100644 --- a/cmd/add.go +++ b/cmd/add.go @@ -27,8 +27,8 @@ import ( "github.com/manifoldco/promptui" "github.com/spf13/cobra" "go.uploadedlobster.com/scotty/internal/backends" + "go.uploadedlobster.com/scotty/internal/cli" "go.uploadedlobster.com/scotty/internal/config" - "go.uploadedlobster.com/scotty/internal/models" ) // addCmd represents the add command @@ -98,16 +98,7 @@ func extraOptions(config *config.ServiceConfig) error { values := make(map[string]any, len(*opts)) for _, opt := range *opts { - var val any - var err error - switch opt.Type { - case models.Bool: - val, err = promptBool(opt) - case models.Secret: - val, err = promptSecret(opt) - case models.String: - val, err = promptString(opt) - } + val, err := cli.Prompt(opt) if err != nil { return err } @@ -118,35 +109,3 @@ func extraOptions(config *config.ServiceConfig) error { config.ConfigValues = values return nil } - -func promptString(opt models.BackendOption) (string, error) { - prompt := promptui.Prompt{ - Label: opt.Label, - Validate: opt.Validate, - Default: opt.Default, - } - - val, err := prompt.Run() - return val, err -} - -func promptSecret(opt models.BackendOption) (string, error) { - prompt := promptui.Prompt{ - Label: opt.Label, - Validate: opt.Validate, - Default: opt.Default, - Mask: '*', - } - - val, err := prompt.Run() - return val, err -} - -func promptBool(opt models.BackendOption) (bool, error) { - sel := promptui.Select{ - Label: opt.Label, - Items: []string{"Yes", "No"}, - } - _, val, err := sel.Run() - return val == "Yes", err -} diff --git a/internal/cli/prompt.go b/internal/cli/prompt.go new file mode 100644 index 0000000..0fbe979 --- /dev/null +++ b/internal/cli/prompt.go @@ -0,0 +1,68 @@ +/* +Copyright © 2023 Philipp Wolfer + +Scotty is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later version. + +Scotty is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +Scotty. If not, see . +*/ + +package cli + +import ( + "fmt" + + "github.com/manifoldco/promptui" + "go.uploadedlobster.com/scotty/internal/models" +) + +func Prompt(opt models.BackendOption) (any, error) { + switch opt.Type { + case models.Bool: + return PromptBool(opt) + case models.Secret: + return PromptSecret(opt) + case models.String: + return PromptString(opt) + default: + return nil, fmt.Errorf("unknown prompt type %v", opt.Type) + } +} + +func PromptString(opt models.BackendOption) (string, error) { + prompt := promptui.Prompt{ + Label: opt.Label, + Validate: opt.Validate, + Default: opt.Default, + } + + val, err := prompt.Run() + return val, err +} + +func PromptSecret(opt models.BackendOption) (string, error) { + prompt := promptui.Prompt{ + Label: opt.Label, + Validate: opt.Validate, + Default: opt.Default, + Mask: '*', + } + + val, err := prompt.Run() + return val, err +} + +func PromptBool(opt models.BackendOption) (bool, error) { + sel := promptui.Select{ + Label: opt.Label, + Items: []string{"Yes", "No"}, + } + _, val, err := sel.Run() + return val == "Yes", err +}