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  }