diff options
author | joop <Joop Kiefte> | 2022-03-17 01:28:30 +0000 |
---|---|---|
committer | joop <Joop Kiefte> | 2022-03-17 01:28:30 +0000 |
commit | 2f645ce8e6240bc8c72b8e50a5453be451225f30 (patch) | |
tree | 1a13509b0f4fd7912e4e1228463fe04b41a482d5 /prompt.go |
Initial commit
Diffstat (limited to 'prompt.go')
-rw-r--r-- | prompt.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/prompt.go b/prompt.go new file mode 100644 index 0000000..6b522fa --- /dev/null +++ b/prompt.go @@ -0,0 +1,40 @@ +package prompt + +import ( + "bufio" + "fmt" + "os" +) + +type Prompter interface { + Prompt(string) +} + +func Read[T any]() (out T, err error) { + nilv := out + b := bufio.NewReader(os.Stdin) + s, err := b.ReadString('\n') + if err != nil { + return nilv, err + } + switch o := any(&out).(type) { + case *string: + *o = s[:len(s)-1] + case *Prompter: + (*o).Prompt(s) + default: + _, err = fmt.Sscan(s, &out) + if err != nil { + return nilv, err + } + } + return out, nil +} + +func MustRead[T any]() T { + out, err := Read[T]() + if err != nil { + panic("Error during read: "+err.Error()) + } + return out +} |