package params import ( "fmt" "os" "github.com/akamensky/argparse" ) /* The whole purpose of this module is to make a struct to just carry all our parsed arguments around between functions Create a Params struct with all the argparse arguments pArg := params.NewParams() */ type Params struct { Flag map[string]bool FlagCounter map[string]int IntList map[string][]int StringList map[string][]string String map[string]string } func (p *Params) addFlag(name string, flag bool) { p.Flag[name] = flag } func (p *Params) addFlagCounter(name string, flag int) { p.FlagCounter[name] = flag } func (p *Params) addIntList(name string, flag []int) { p.IntList[name] = flag } func (p *Params) addStringList(name string, flag []string) { p.StringList[name] = flag } func (p *Params) addString(name string, flag string) { p.String[name] = flag } func NewParams() *Params { // Setup the parser for arguments parser := argparse.NewParser("quickpassthrough", "A utility to help you configure your host for GPU Passthrough") // Configure arguments /*gui := parser.Flag("g", "gui", &argparse.Options{ Required: false, Help: "Launch GUI (placeholder for now)", })*/ // Add version flag version := parser.Flag("v", "version", &argparse.Options{ Required: false, Help: "Display the version", }) // Parse arguments err := parser.Parse(os.Args) if err != nil { // In case of error print error and print usage // This can also be done by passing -h or --help flags fmt.Print(parser.Usage(err)) os.Exit(4) } // Make our struct pArg := &Params{ Flag: make(map[string]bool), FlagCounter: make(map[string]int), IntList: make(map[string][]int), StringList: make(map[string][]string), String: make(map[string]string), } // Add all parsed arguments to a struct for portability since we will use them all over the program pArg.addFlag("version", *version) /*pArg.addFlag("gui", *gui) pArg.addFlag("gpu", *gpu) pArg.addFlag("usb", *usb) pArg.addFlag("nic", *nic) pArg.addFlag("sata", *sata) pArg.addFlagCounter("related", *related) pArg.addStringList("ignore", *ignore) pArg.addIntList("iommu_group", *iommu_group) pArg.addFlag("kernelmodules", *kernelmodules) pArg.addFlag("legacyoutput", *legacyoutput) pArg.addFlag("id", *id) pArg.addFlag("pciaddr", *pciaddr) pArg.addFlag("rom", *rom) pArg.addString("format", *format)*/ return pArg }