From 2f645ce8e6240bc8c72b8e50a5453be451225f30 Mon Sep 17 00:00:00 2001 From: joop Date: Thu, 17 Mar 2022 01:28:30 +0000 Subject: Initial commit --- example/example | Bin 0 -> 1976408 bytes example/example.go | 15 +++++++++++++++ go.mod | 3 +++ prompt.go | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100755 example/example create mode 100644 example/example.go create mode 100644 go.mod create mode 100644 prompt.go diff --git a/example/example b/example/example new file mode 100755 index 0000000..592c910 Binary files /dev/null and b/example/example 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 +} -- cgit v1.2.3-70-g09d2