diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2017-05-02 21:22:20 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2017-05-02 21:22:20 +0200 |
| commit | 72733e8203654cd26464c8c5a6c955b025102cca (patch) | |
| tree | 4a8c312fb25dcf79f2cd61b88b7f2ff6baf8d996 /pkg/util/util.go | |
| parent | 6b382c55ed7885857a6232a0c8b086ab1f64985e (diff) | |
| download | gofu-72733e8203654cd26464c8c5a6c955b025102cca.tar.gz | |
restructure rtree into gofu (with rtree as the first applet)
Diffstat (limited to 'pkg/util/util.go')
| -rw-r--r-- | pkg/util/util.go | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/pkg/util/util.go b/pkg/util/util.go new file mode 100644 index 0000000..3c5e724 --- /dev/null +++ b/pkg/util/util.go @@ -0,0 +1,90 @@ +/******************************************************************************* +* +* Copyright 2017 Stefan Majewsky <majewsky@gmx.net> +* +* This program is free software: you can redistribute it and/or modify it under +* the terms of the GNU General Public License as published by the Free Software +* Foundation, either version 3 of the License, or (at your option) any later +* version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +* A PARTICULAR PURPOSE. See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see <http://www.gnu.org/licenses/>. +* +*******************************************************************************/ + +package util + +import ( + "bufio" + "fmt" + "os" + "sort" + "strings" +) + +//ShowSorted sorts the given lines and prints them on stdout. +func ShowSorted(lines []string) { + sort.Strings(lines) + fmt.Println(strings.Join(lines, "\n")) +} + +//ShowError prints the given error on stderr if it is non-nil, or returns false otherwise. +func ShowError(err error) bool { + if err == nil { + return false + } + fmt.Fprintf(os.Stderr, "ERROR: %s\n", err.Error()) + return true +} + +//FatalIfError prints the given error on stderr and exits with an error code. +func FatalIfError(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "FATAL: %s\n", err.Error()) + os.Exit(255) + } +} + +var stdin = bufio.NewReader(os.Stdin) + +//Prompt prints the question, then waits for the user to press one of the +//possible answer keys. Answer keys will automatically be converted to lower +//case and returned as such. +// +// choice := Prompt("(y)es or (n)o", []string{"y","n"}) +// //choice is either "y" or "n" +func Prompt(question string, answers []string) string { + for idx, answer := range answers { + answers[idx] = strings.ToLower(answer) + } + + os.Stdout.Write([]byte(">> " + strings.TrimSpace(question) + " ")) + for { + input, err := stdin.ReadString('\n') + FatalIfError(err) + input = strings.TrimSpace(input) + for _, answer := range answers { + if strings.ToLower(input) == answer { + return answer + } + } + + //user typed gibberish - ask again + os.Stdout.Write([]byte("Please type ")) + for idx, answer := range answers { + if idx > 0 { + if idx == len(answers)-1 { + os.Stdout.Write([]byte(" or ")) + } else { + os.Stdout.Write([]byte(", ")) + } + } + os.Stdout.Write([]byte("'" + answer + "'")) + } + os.Stdout.Write([]byte(": ")) + } +} |
