/* 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 }