diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36c6ae2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.a +*.exe +*.o +*.out +*.so diff --git a/cmd/argh-example/main.go b/cmd/argh-example/main.go index 325c7ec..4e192e9 100644 --- a/cmd/argh-example/main.go +++ b/cmd/argh-example/main.go @@ -15,16 +15,16 @@ func main() { log.SetFlags(0) - pt, err := argh.ParseArgs(os.Args, argh.NewParserConfig( - &argh.CommandConfig{ - NValue: argh.OneOrMoreValue, - ValueNames: []string{"topping"}, - Flags: &argh.Flags{ - Automatic: true, - }, + pCfg := argh.NewParserConfig() + pCfg.Prog = argh.CommandConfig{ + NValue: argh.OneOrMoreValue, + ValueNames: []string{"topping"}, + Flags: &argh.Flags{ + Automatic: true, }, - nil, - )) + } + + pt, err := argh.ParseArgs(os.Args, pCfg) if err != nil { log.Fatal(err) } diff --git a/parser_config.go b/parser_config.go index 62ea57d..65629da 100644 --- a/parser_config.go +++ b/parser_config.go @@ -7,10 +7,7 @@ const ( ) var ( - POSIXyParserConfig = NewParserConfig( - nil, - POSIXyScannerConfig, - ) + POSIXyParserConfig = NewParserConfig() ) type NValue int @@ -35,20 +32,24 @@ type ParserConfig struct { ScannerConfig *ScannerConfig } -func NewParserConfig(prog *CommandConfig, sCfg *ScannerConfig) *ParserConfig { - if sCfg == nil { - sCfg = POSIXyScannerConfig - } +type ParserOption func(*ParserConfig) + +func NewParserConfig(opts ...ParserOption) *ParserConfig { + pCfg := &ParserConfig{} - if prog == nil { - prog = &CommandConfig{} + for _, opt := range opts { + if opt != nil { + opt(pCfg) + } } - prog.init() + if pCfg.Prog.IsZero() { + pCfg.Prog = CommandConfig{} + pCfg.Prog.init() + } - pCfg := &ParserConfig{ - Prog: *prog, - ScannerConfig: sCfg, + if pCfg.ScannerConfig == nil { + pCfg.ScannerConfig = POSIXyScannerConfig } return pCfg @@ -61,6 +62,13 @@ type CommandConfig struct { Commands *Commands } +func (cCfg *CommandConfig) IsZero() bool { + return cCfg.NValue == NValue(0) && + cCfg.ValueNames == nil && + cCfg.Flags == nil && + cCfg.Commands == nil +} + func (cCfg *CommandConfig) init() { if cCfg.ValueNames == nil { cCfg.ValueNames = []string{}