From 2f645ce8e6240bc8c72b8e50a5453be451225f30 Mon Sep 17 00:00:00 2001 From: joop Date: Thu, 17 Mar 2022 01:28:30 +0000 Subject: Initial commit --- prompt.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 prompt.go (limited to 'prompt.go') 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 +} -- cgit v1.2.3-70-g09d2