feat: initial goget release — modern IPv6-first download utility
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
//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)
|
||||
}
|
||||
Reference in New Issue
Block a user