42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package flags
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
goflags "github.com/jessevdk/go-flags"
|
|
"os"
|
|
)
|
|
|
|
var PrintedHelpErr = goflags.ErrHelp
|
|
var NotEnoughArgs = errors.New("not enough arguments")
|
|
|
|
type Options struct {
|
|
Foreground bool `short:"f" long:"foreground" description:"Run in the foreground"`
|
|
ConfigFile string `short:"c" long:"config" description:"Configuration file location" value-name:"FILE"`
|
|
PidFile string `short:"p" long:"pid" description:"PID file location"`
|
|
|
|
Positional struct {
|
|
InterfaceName string `required:"yes" positional-arg-name:"INTERFACE-NAME" description:"Interface name"`
|
|
} `positional-args:"yes"`
|
|
}
|
|
|
|
func ParseFlags() (*Options, error) {
|
|
o := new(Options)
|
|
parser := goflags.NewParser(o, goflags.Default)
|
|
|
|
_, err := parser.Parse()
|
|
if err != nil {
|
|
parser.WriteHelp(os.Stdout)
|
|
return nil, err
|
|
}
|
|
|
|
if o.ConfigFile == "" {
|
|
o.ConfigFile = fmt.Sprintf(DefaultConfigFile, o.Positional.InterfaceName)
|
|
}
|
|
if o.PidFile == "" {
|
|
o.PidFile = fmt.Sprintf(DefaultPidFile, o.Positional.InterfaceName)
|
|
}
|
|
|
|
return o, nil
|
|
}
|