cmd/streamdata: y/n prompt helper
This returns a boolean value with fallback. Signed-off-by: Yonah <contrib@gensokyo.uk>
This commit is contained in:
@@ -126,6 +126,40 @@ invalid:
|
||||
return v, true
|
||||
}
|
||||
|
||||
// promptBool prompts the user for a y/n response until a valid response or a
|
||||
// single newline character is read.
|
||||
func promptBool(
|
||||
br *bufio.Reader,
|
||||
p string,
|
||||
fallback bool,
|
||||
) (bool, bool) {
|
||||
if fallback {
|
||||
p += "[Y/n] "
|
||||
} else {
|
||||
p += "[y/N] "
|
||||
}
|
||||
|
||||
invalid:
|
||||
s, ok := prompt(br, p)
|
||||
if !ok {
|
||||
return false, false
|
||||
}
|
||||
|
||||
switch strings.ToLower(strings.TrimSpace(s)) {
|
||||
default:
|
||||
goto invalid
|
||||
|
||||
case "":
|
||||
return fallback, true
|
||||
|
||||
case "y":
|
||||
return true, true
|
||||
|
||||
case "n":
|
||||
return false, true
|
||||
}
|
||||
}
|
||||
|
||||
// require panics with an error if ok is false, and returns v otherwise.
|
||||
func require[T any](v T, ok bool) T {
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user