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 |
Initial commit
-rwxr-xr-x | example/example | bin | 0 -> 1976408 bytes | |||
-rw-r--r-- | example/example.go | 15 | ||||
-rw-r--r-- | go.mod | 3 | ||||
-rw-r--r-- | prompt.go | 40 |
4 files changed, 58 insertions, 0 deletions
diff --git a/example/example b/example/example Binary files differnew file mode 100755 index 0000000..592c910 --- /dev/null +++ b/example/example 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) +} @@ -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 +} |