|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- package cmd
-
- import (
- "encoding"
- "fmt"
- "os"
- "strconv"
- "strings"
-
- "github.com/chzyer/readline"
- )
-
- func SplitObjectPath(str string) (bkt string, pkg string, obj string, ok bool) {
- comps := strings.Split(str, ":")
- if len(comps) != 2 {
- return "", "", "", false
- }
-
- pat := comps[1]
- comps = strings.Split(comps[0], "/")
- if len(comps) != 2 {
- return "", "", "", false
- }
-
- return comps[0], comps[1], pat, true
- }
-
- func SelectOne(rl *readline.Instance, prompt string, options []string) int {
- fmt.Printf("\033[36m%v: \033[0m\n", prompt)
- for i, option := range options {
- fmt.Printf("%d. %s\n", i+1, option)
- }
- rl.SetPrompt("请输入选项编号: ")
-
- for {
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- idx, err := strconv.ParseInt(str, 10, 64)
- if err != nil {
- fmt.Println("无效的编号, 请重新输入")
- continue
- }
- if idx < 1 || idx > int64(len(options)) {
- fmt.Println("无效的编号, 请重新输入")
- continue
- }
-
- return int(idx - 1)
- }
- }
-
- func ReadString(rl *readline.Instance, prompt string) string {
- rl.SetPrompt(fmt.Sprintf("%v: ", prompt))
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- return str
- }
-
- func ReadStringDef(rl *readline.Instance, prompt string, def string) string {
- rl.SetPrompt(fmt.Sprintf("%v(默认: %s): ", prompt, def))
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- if str == "" {
- return def
- }
-
- return str
- }
-
- func ReadStringValue[T encoding.TextUnmarshaler](rl *readline.Instance, prompt string, v T) {
- rl.SetPrompt(fmt.Sprintf("%v: ", prompt))
- for {
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- err = v.UnmarshalText([]byte(str))
- if err != nil {
- fmt.Printf("%v, 请重新输入\n", err)
- continue
- }
- break
- }
- }
-
- func ReadInt(rl *readline.Instance, prompt string) int {
- rl.SetPrompt(fmt.Sprintf("%v: ", prompt))
- for {
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- idx, err := strconv.ParseInt(str, 10, 64)
- if err != nil {
- fmt.Println("无效的输入, 请重新输入")
- continue
- }
-
- return int(idx)
- }
- }
-
- func ReadIntRanged(rl *readline.Instance, prompt string, min, max int) int {
- rl.SetPrompt(fmt.Sprintf("%v(%d-%d): ", prompt, min, max))
- for {
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
-
- idx, err := strconv.ParseInt(str, 10, 64)
- if err != nil {
- fmt.Println("无效的输入, 请重新输入")
- continue
- }
-
- if idx < int64(min) || idx > int64(max) {
- fmt.Printf("输入值必须在%d-%d之间, 请重新输入\n", min, max)
- continue
- }
-
- return int(idx)
- }
- }
-
- func ReadPassword(rl *readline.Instance, prompt string) []byte {
- pwd, err := rl.ReadPassword(fmt.Sprintf("%v: ", prompt))
- if err != nil {
- os.Exit(0)
- }
-
- return pwd
- }
-
- func ReadBool(rl *readline.Instance, prompt string) bool {
- rl.SetPrompt(fmt.Sprintf("\033[36m%v(y/n): \033[0m", prompt))
- for {
- str, err := rl.Readline()
- if err != nil {
- os.Exit(0)
- }
- if str == "y" || str == "Y" {
- return true
- }
- if str == "n" || str == "N" {
- return false
- }
- fmt.Println("无效的输入, 请重新输入")
- }
- }
|