diff --git a/commands/option.go b/commands/option.go index f068ec22893ee1c04d578b2d5fbf6596906b056b..8f11ace49e1120890776eb6213074685e1993dee 100644 --- a/commands/option.go +++ b/commands/option.go @@ -18,11 +18,43 @@ type Option struct { Type reflect.Kind // value must be this type Description string // a short string to describe this option - // TODO: add more features(?): + // MAYBE_TODO: add more features(?): //Default interface{} // the default value (ignored if `Required` is true) //Required bool // whether or not the option must be provided } +// constructor helper functions +func NewOption(kind reflect.Kind, names ...string) Option { + if len(names) < 2 { + panic("Options require at least two string values (name and description)") + } + + desc := names[len(names)-1] + names = names[:len(names)-2] + + return Option{ + Names: names, + Type: kind, + Description: desc, + } +} + +func BoolOption(names ...string) Option { + return NewOption(Bool, names...) +} +func IntOption(names ...string) Option { + return NewOption(Int, names...) +} +func UintOption(names ...string) Option { + return NewOption(Uint, names...) +} +func FloatOption(names ...string) Option { + return NewOption(Float, names...) +} +func StringOption(names ...string) Option { + return NewOption(String, names...) +} + // Flag names const ( EncShort = "enc"