123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- // mauflag - An extendable command-line argument parser for Golang
- // Copyright (C) 2016 Maunium
- //
- // This program is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- // You should have received a copy of the GNU General Public License
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
- package mauflag
- // Flag represents a single flag
- type Flag struct {
- longKeys []string
- shortKeys []string
- Value Value
- defaul string
- usage string
- usageCat string
- usageValName string
- }
- // Make creates and registers a flag
- func (fs *Set) Make() *Flag {
- flag := &Flag{}
- val := stringValue("")
- flag.Value = &val
- flag.usageCat = "Application"
- flag.activateDefaultValue()
- fs.flags = append(fs.flags, flag)
- return flag
- }
- // MakeKey creates and registers a flag with the given short and long keys
- func (fs *Set) MakeKey(short, long string) *Flag {
- return fs.Make().Key(short, long)
- }
- // MakeFull creates and registers a flag with the given short and long keys, usage string and default value
- func (fs *Set) MakeFull(short, long, usage, defVal string) *Flag {
- return fs.MakeKey(short, long).Usage(usage).Default(defVal)
- }
- func (flag *Flag) setValue(val string) error {
- return flag.Value.Set(val)
- }
- // Usage sets the usage of this Flag
- func (flag *Flag) Usage(usage string) *Flag {
- flag.usage = usage
- return flag
- }
- // UsageCategory sets the category of this flag (e.g. Application or Help)
- func (flag *Flag) UsageCategory(category string) *Flag {
- flag.usageCat = category
- return flag
- }
- // ValueName sets the value name in the usage page
- func (flag *Flag) ValueName(valname string) *Flag {
- flag.usageValName = valname
- return flag
- }
- // Default sets the default value of this Flag
- // The value given is passed to the Value container of this flag using `Set()`
- func (flag *Flag) Default(defaul string) *Flag {
- flag.defaul = defaul
- flag.activateDefaultValue()
- return flag
- }
- func (flag *Flag) activateDefaultValue() {
- if len(flag.defaul) > 0 && flag.Value != nil {
- flag.Value.Set(flag.defaul)
- }
- }
- // LongKey adds a long key to this Flag
- func (flag *Flag) LongKey(key string) *Flag {
- flag.longKeys = append(flag.longKeys, key)
- return flag
- }
- // ShortKey adds a short key to this Flag
- func (flag *Flag) ShortKey(key string) *Flag {
- flag.shortKeys = append(flag.shortKeys, key)
- return flag
- }
- // Key adds a long and a short key to this Flag
- func (flag *Flag) Key(short, long string) *Flag {
- return flag.ShortKey(short).LongKey(long)
- }
- // Custom sets a custom object that implemets Value as the value of this flag
- func (flag *Flag) Custom(val Value) {
- flag.Value = val
- flag.activateDefaultValue()
- }
- // Bool sets the type of this flag to a boolean and returns a pointer to the value
- func (flag *Flag) Bool() *bool {
- val := boolValue(false)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*bool)(&val)
- }
- // String sets the type of this flag to a string and returns a pointer to the value
- func (flag *Flag) String() *string {
- val := stringValue("")
- flag.Value = &val
- flag.activateDefaultValue()
- return (*string)(&val)
- }
- // StringMap sets the type of this flag to a string-string map and returns a pointer to the value
- func (flag *Flag) StringMap() *map[string]string {
- val := ssMapValue{}
- flag.Value = &val
- flag.activateDefaultValue()
- return (*map[string]string)(&val)
- }
- // StringArray sets the type of this flag to a string array and returns a pointer to the value
- func (flag *Flag) StringArray() *[]string {
- val := stringArrayValue{}
- flag.Value = &val
- flag.activateDefaultValue()
- return (*[]string)(&val)
- }
- // IntArray sets the type of this flag to a signed default-length integer array and returns a pointer to the value
- func (flag *Flag) IntArray() *[]int {
- val := intArrayValue{}
- flag.Value = &val
- flag.activateDefaultValue()
- return (*[]int)(&val)
- }
- // Int64Array sets the type of this flag to a signed 64-bit integer array and returns a pointer to the value
- func (flag *Flag) Int64Array() *[]int64 {
- val := int64ArrayValue{}
- flag.Value = &val
- flag.activateDefaultValue()
- return (*[]int64)(&val)
- }
- // Int sets the type of this flag to a signed default-length integer and returns a pointer to the value
- func (flag *Flag) Int() *int {
- val := intValue(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*int)(&val)
- }
- // Uint sets the type of this flag to an unsigned default-length integer and returns a pointer to the value
- func (flag *Flag) Uint() *uint {
- val := uintValue(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*uint)(&val)
- }
- // Int8 sets the type of this flag to a signed 8-bit integer and returns a pointer to the value
- func (flag *Flag) Int8() *int8 {
- val := int8Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*int8)(&val)
- }
- // Uint8 sets the type of this flag to an unsigned 8-bit integer and returns a pointer to the value
- func (flag *Flag) Uint8() *uint8 {
- val := uint8Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*uint8)(&val)
- }
- // Byte sets the type of this flag to a byte (unsigned 8-bit integer) and returns a pointer to the value
- func (flag *Flag) Byte() *byte {
- val := byteValue(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*byte)(&val)
- }
- // Int16 sets the type of this flag to a signed 16-bit integer and returns a pointer to the value
- func (flag *Flag) Int16() *int16 {
- val := int16Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*int16)(&val)
- }
- // Uint16 sets the type of this flag to an unsigned 16-bit integer and returns a pointer to the value
- func (flag *Flag) Uint16() *uint16 {
- val := uint16Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*uint16)(&val)
- }
- // Int32 sets the type of this flag to a signed 32-bit integer and returns a pointer to the value
- func (flag *Flag) Int32() *int32 {
- val := int32Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*int32)(&val)
- }
- // Rune sets the type of this flag to a rune (signed 32-bit integer) and returns a pointer to the value
- func (flag *Flag) Rune() *rune {
- val := runeValue(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*rune)(&val)
- }
- // Uint32 sets the type of this flag to an unsigned 32-bit integer and returns a pointer to the value
- func (flag *Flag) Uint32() *uint32 {
- val := uint32Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*uint32)(&val)
- }
- // Int64 sets the type of this flag to a signed 64-bit integer and returns a pointer to the value
- func (flag *Flag) Int64() *int64 {
- val := int64Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*int64)(&val)
- }
- // Uint64 sets the type of this flag to an unsigned 64-bit integer and returns a pointer to the value
- func (flag *Flag) Uint64() *uint64 {
- val := uint64Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*uint64)(&val)
- }
- // Float32 sets the type of this flag to an 32-bit float and returns a pointer to the value
- func (flag *Flag) Float32() *float32 {
- val := float32Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*float32)(&val)
- }
- // Float64 sets the type of this flag to an 64-bit float and returns a pointer to the value
- func (flag *Flag) Float64() *float64 {
- val := float64Value(0)
- flag.Value = &val
- flag.activateDefaultValue()
- return (*float64)(&val)
- }
|