From c128865c4c7411c29a59fca9a3a2f95537686d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20B=C3=BCtow?= Date: Mon, 20 Jan 2020 18:41:05 +0000 Subject: Move commands to cmd/ and move internal dependencies to internal/ --- prompt/prompt.go | 95 -------------------------------------------------------- 1 file changed, 95 deletions(-) delete mode 100644 prompt/prompt.go (limited to 'prompt') diff --git a/prompt/prompt.go b/prompt/prompt.go deleted file mode 100644 index 395d4bd..0000000 --- a/prompt/prompt.go +++ /dev/null @@ -1,95 +0,0 @@ -package prompt - -import ( - "bufio" - "dtail/logger" - "fmt" - "os" - "strings" -) - -// Answer is a user input of a prompt question. -type Answer struct { - // Long version of the expected user input - Long string - // Short version of the expected user input - Short string - // Runs when user input matches - Callback func() - // Runs after Callback and after logging resumes - EndCallback func() - - AskAgain bool -} - -// Prompt used for interactive user input. -type Prompt struct { - question string - answers []Answer -} - -func (p *Prompt) askString() string { - var sb strings.Builder - - sb.WriteString(p.question) - sb.WriteString("? (") - - var ax []string - for _, a := range p.answers { - ax = append(ax, fmt.Sprintf("%s=%s", a.Short, a.Long)) - } - - sb.WriteString(strings.Join(ax, ",")) - sb.WriteString("): ") - - return sb.String() -} - -// New returns a new prompt. -func New(question string) *Prompt { - return &Prompt{question: question} -} - -// Add an answer. -func (p *Prompt) Add(answer Answer) { - p.answers = append(p.answers, answer) -} - -// Ask a question. -func (p *Prompt) Ask() { - reader := bufio.NewReader(os.Stdin) - logger.Pause() - - for { - fmt.Print(p.askString()) - answerStr, _ := reader.ReadString('\n') - - if a, ok := p.answer(strings.TrimSpace(answerStr)); ok { - if a.Callback != nil { - a.Callback() - } - - if !a.AskAgain { - logger.Resume() - if a.EndCallback != nil { - a.EndCallback() - } - return - } - } - } -} - -func (p *Prompt) answer(answerStr string) (*Answer, bool) { - for _, a := range p.answers { - switch answerStr { - case a.Long: - return &a, true - case a.Short: - return &a, true - default: - } - } - - return nil, false -} -- cgit v1.2.3