Files
goget/internal/cli/parser.go
T

81 lines
1.6 KiB
Go
Raw Permalink Normal View History

//go:build linux || freebsd
// +build linux freebsd
package cli
import (
"flag"
"fmt"
"os"
"strings"
)
// Parser helps with argument parsing
type Parser struct {
fs *flag.FlagSet
}
// NewParser creates new parser
func NewParser(name string) *Parser {
return &Parser{
fs: flag.NewFlagSet(name, flag.ExitOnError),
}
}
// Parse parses arguments
func (p *Parser) Parse(args []string) error {
return p.fs.Parse(args)
}
// GetBool returns a bool flag
func (p *Parser) GetBool(name string) bool {
return p.fs.Lookup(name).Value.String() == "true"
}
// GetString returns a string flag
func (p *Parser) GetString(name string) string {
return p.fs.Lookup(name).Value.String()
}
// ParseArgs parses command-line arguments
func ParseArgs(args []string) (map[string]string, error) {
result := make(map[string]string)
for i := 0; i < len(args); i++ {
arg := args[i]
if strings.HasPrefix(arg, "--") {
key := strings.TrimPrefix(arg, "--")
if i+1 < len(args) && !strings.HasPrefix(args[i+1], "--") {
result[key] = args[i+1]
i++
} else {
result[key] = "true"
}
}
}
return result, nil
}
// ValidateRequiredFlags validates required flags
func ValidateRequiredFlags(flags map[string]string, required []string) error {
var missing []string
for _, req := range required {
if _, exists := flags[req]; !exists {
missing = append(missing, req)
}
}
if len(missing) > 0 {
return fmt.Errorf("missing required flags: %s", strings.Join(missing, ", "))
}
return nil
}
// ExitWithError prints an error and exits the program
func ExitWithError(err error) {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}