Getting started
commit
4c4746031d
|
|
@ -0,0 +1,50 @@
|
|||
package args
|
||||
|
||||
import "time"
|
||||
|
||||
type Arg struct {
|
||||
Env string
|
||||
Flag string
|
||||
Help string
|
||||
Default interface{}
|
||||
Value interface{}
|
||||
ArgType Type
|
||||
}
|
||||
|
||||
func NewArg(argType Type, key, help string, def interface{}) *Arg {
|
||||
return &Arg{
|
||||
Env: key,
|
||||
Flag: key,
|
||||
Help: help,
|
||||
Default: def,
|
||||
ArgType: argType,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Arg) GetInt(key string) int {
|
||||
if a.ArgType != INT {
|
||||
return -1
|
||||
}
|
||||
return a.Value.(int)
|
||||
}
|
||||
|
||||
func (a *Arg) GetString(key string) string {
|
||||
if a.ArgType != STRING {
|
||||
return ""
|
||||
}
|
||||
return a.Value.(string)
|
||||
}
|
||||
|
||||
func (a *Arg) GetBool(key string) bool {
|
||||
if a.ArgType != BOOL {
|
||||
return false
|
||||
}
|
||||
return a.Value.(bool)
|
||||
}
|
||||
|
||||
func (a *Arg) GetDuration(key string) time.Duration {
|
||||
if a.ArgType != DURATION {
|
||||
return time.Duration(0)
|
||||
}
|
||||
return a.Value.(time.Duration)
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package args
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
)
|
||||
|
||||
type ArgSet struct {
|
||||
parsed bool
|
||||
args []*Arg
|
||||
}
|
||||
|
||||
func NewArgSet() *ArgSet {
|
||||
return &ArgSet{
|
||||
args: []*Arg{},
|
||||
}
|
||||
}
|
||||
|
||||
func (as *ArgSet) Append(argType Type, key, help string, def interface{}) {
|
||||
as.args = append(as.args, NewArg(argType, key, help, def))
|
||||
}
|
||||
|
||||
func (as *ArgSet) Get(key string) *Arg {
|
||||
if !as.parsed {
|
||||
return nil
|
||||
}
|
||||
for i := range as.args {
|
||||
if as.args[i].Key == key {
|
||||
return as[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (as *ArgSet) Parse() error {
|
||||
if as.parsed {
|
||||
return nil
|
||||
}
|
||||
defer func() {
|
||||
as.parsed = true
|
||||
}()
|
||||
|
||||
if err := as.setValueFromDefaults(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := as.setValueFromEnv(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := as.setValueFromFlag(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (as *ArgSet) setValueFromDefaults() error {
|
||||
// TODO if not casted type, return err
|
||||
for i := range as.args {
|
||||
args[i].Value = args[i].Default
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (as *ArgSet) setValueFromEnv() error {
|
||||
// TODO if not casted type, return err
|
||||
for i := range as.args {
|
||||
key := args[i].Key
|
||||
if v, ok := os.LookupEnv(key); ok {
|
||||
args[i].Value = v
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (as *ArgSet) setValueFromFlags() error {
|
||||
// TODO if not casted type, return err
|
||||
return errors.New("not impl")
|
||||
}
|
||||
Loading…
Reference in New Issue