aboutsummaryrefslogtreecommitdiff
path: root/prompt.go
diff options
context:
space:
mode:
authorjoop <Joop Kiefte>2022-03-17 01:28:30 +0000
committerjoop <Joop Kiefte>2022-03-17 01:28:30 +0000
commit2f645ce8e6240bc8c72b8e50a5453be451225f30 (patch)
tree1a13509b0f4fd7912e4e1228463fe04b41a482d5 /prompt.go
Initial commit
Diffstat (limited to 'prompt.go')
-rw-r--r--prompt.go40
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
+}