github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/client/cli/flags/unparsed.go (about) 1 package flags 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 // GetUnparsedValue returns the value of a flag that has been provided after a "--" on the command 10 // line, and hence hasn't been parsed as a normal flag. Typical use case is: 11 // 12 // telepresence intercept --docker-run ... -- --name <name> 13 func GetUnparsedValue(args []string, flag string) (string, error) { 14 feq := flag + "=" 15 for i, arg := range args { 16 var v string 17 switch { 18 case arg == flag: 19 i++ 20 if i < len(args) { 21 if v = args[i]; strings.HasPrefix(v, "-") { 22 v = "" 23 } 24 } 25 case strings.HasPrefix(arg, feq): 26 v = arg[len(feq):] 27 default: 28 continue 29 } 30 if v == "" { 31 return "", fmt.Errorf("flag %q requires a value", flag) 32 } 33 return v, nil 34 } 35 return "", nil 36 } 37 38 // GetUnparsedBoolean returns the value of a boolean flag that has been provided after a "--" on the command 39 // line, and hence hasn't been parsed as a normal flag. Typical use case is: 40 // 41 // telepresence intercept --docker-run ... -- --rm 42 func GetUnparsedBoolean(args []string, flag string) (bool, bool, error) { 43 feq := flag + "=" 44 for _, arg := range args { 45 switch { 46 case arg == flag: 47 return true, true, nil 48 case strings.HasPrefix(arg, feq): 49 set, err := strconv.ParseBool(arg[len(feq):]) 50 return set, true, err 51 default: 52 continue 53 } 54 } 55 return false, false, nil 56 }