aboutsummaryrefslogtreecommitdiff
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
Initial commit
-rwxr-xr-xexample/examplebin0 -> 1976408 bytes
-rw-r--r--example/example.go15
-rw-r--r--go.mod3
-rw-r--r--prompt.go40
4 files changed, 58 insertions, 0 deletions
diff --git a/example/example b/example/example
new file mode 100755
index 0000000..592c910
--- /dev/null
+++ b/example/example
Binary files differ
diff --git a/example/example.go b/example/example.go
new file mode 100644
index 0000000..13b2b7d
--- /dev/null
+++ b/example/example.go
@@ -0,0 +1,15 @@
+package main
+
+import (
+ "fmt"
+
+ "git.kiefte.eu/lapingvino/prompt"
+)
+
+func main() {
+ fmt.Print("Enter a string: ")
+ s := prompt.MustRead[string]()
+ fmt.Print("Now enter a complex number: ")
+ c := prompt.MustRead[complex128]()
+ fmt.Println(s, c)
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..d27367c
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module git.kiefte.eu/lapingvino/prompt
+
+go 1.18
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
+}