From 97e93553a142496fb556239d7f2e3ac728f95db9 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Sat, 13 Jan 2024 14:11:58 +0100 Subject: [PATCH] Support integer config values --- internal/cli/prompt.go | 28 ++++++++++++++++++++++++++++ internal/config/services.go | 8 ++++++++ internal/models/options.go | 1 + 3 files changed, 37 insertions(+) diff --git a/internal/cli/prompt.go b/internal/cli/prompt.go index fd0676d..f2d045b 100644 --- a/internal/cli/prompt.go +++ b/internal/cli/prompt.go @@ -17,6 +17,7 @@ package cli import ( "fmt" + "strconv" "github.com/manifoldco/promptui" "go.uploadedlobster.com/scotty/internal/i18n" @@ -31,6 +32,8 @@ func Prompt(opt models.BackendOption) (any, error) { return PromptSecret(opt) case models.String: return PromptString(opt) + case models.Int: + return PromptInt(opt) default: return nil, fmt.Errorf("unknown prompt type %v", opt.Type) } @@ -78,3 +81,28 @@ func PromptYesNo(label string, defaultValue bool) (bool, error) { _, val, err := sel.Run() return val == yes, err } + +func PromptInt(opt models.BackendOption) (int, error) { + validate := func(s string) error { + if opt.Validate != nil { + if err := opt.Validate(s); err != nil { + return err + } + } + if _, err := strconv.Atoi(s); err != nil { + return err + } + return nil + } + prompt := promptui.Prompt{ + Label: opt.Label, + Validate: validate, + Default: opt.Default, + } + + val, err := prompt.Run() + if err != nil { + return 0, err + } + return strconv.Atoi(val) +} diff --git a/internal/config/services.go b/internal/config/services.go index 7c8bdb6..c04ee12 100644 --- a/internal/config/services.go +++ b/internal/config/services.go @@ -62,6 +62,14 @@ func (c *ServiceConfig) GetBool(key string, defaultValue bool) bool { } } +func (c *ServiceConfig) GetInt(key string, defaultValue int) int { + if c.IsSet(key) { + return cast.ToInt(c.ConfigValues[key]) + } else { + return defaultValue + } +} + func (c *ServiceConfig) IsSet(key string) bool { _, ok := c.ConfigValues[key] return ok diff --git a/internal/models/options.go b/internal/models/options.go index 0763032..ffa3ae6 100644 --- a/internal/models/options.go +++ b/internal/models/options.go @@ -21,6 +21,7 @@ const ( Bool OptionType = "bool" Secret OptionType = "secret" String OptionType = "string" + Int OptionType = "int" ) type BackendOption struct {