/
question.go
78 lines (63 loc) · 1.18 KB
/
question.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package models
import (
"github.com/manifoldco/promptui"
)
type QA interface {
Ask() (answer string, err error)
}
type Question struct {
Title string
DefaultVal string
}
func (q Question) Ask() (answer string, err error) {
templates := &promptui.PromptTemplates{
Prompt: "{{ . }}: ",
Valid: "{{ . | green }}: ",
Invalid: "{{ . | red }}: ",
Success: "{{ . | bold }}: ",
}
qa := promptui.Prompt{
Label: q.Title,
Templates: templates,
Default: q.DefaultVal,
}
answer, err = qa.Run()
return
}
type Confirm struct {
Title string
DefaultToYes bool
}
func (c Confirm) Ask() (answer string, err error) {
defaultVal := "N"
if c.DefaultToYes {
defaultVal = "Y"
}
prompt := promptui.Prompt{
Label: c.Title,
IsConfirm: true,
Default: defaultVal,
}
_, err = prompt.Run()
if err != nil && err != promptui.ErrInterrupt {
answer = "N"
err = nil
} else {
answer = "Y"
}
return
}
type Questions struct {
Items []QA
}
func (qs Questions) Ask() (answers []string, err error) {
answer := ""
for _, item := range qs.Items {
answer, err = item.Ask()
if err != nil {
return
}
answers = append(answers, answer)
}
return
}