github.com/wallyqs/gcli@v0.2.3-0.20151010121825-a114d5d1758d/skeleton/flag.go (about) 1 package skeleton 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 // TypeString represents type as string 9 const ( 10 TypeStringInt = "int" 11 TypeStringBool = "bool" 12 TypeStringString = "string" 13 ) 14 15 // Flag stores flag meta informations 16 type Flag struct { 17 // Name is flag name, this is used for flag variable name in generated code. 18 // Name is equal to titled LongName. 19 Name string 20 21 // LongName is long form of the flag name. 22 // This must be provided by user 23 LongName string 24 25 // ShortName is short form of flag name. 26 // This is generated automatically from LongName 27 ShortName string 28 29 // TypeString is flag type. This must be provided by user 30 TypeString string 31 32 // Default is default value. 33 // This is automatically generated from TypeString 34 Default interface{} 35 36 // Description is help message of the flag. 37 Description string 38 } 39 40 // Fix fixed user input for templating. 41 func (f *Flag) Fix() error { 42 43 // Fix Typestring 44 if err := f.fixTypeString(); err != nil { 45 return err 46 } 47 48 f.LongName = strings.ToLower(f.LongName) 49 50 // Name is same as LongName by default 51 f.Name = f.LongName 52 53 // ShortName is first character of LongName 54 // TODO, when same first character is provided. 55 f.ShortName = string(f.LongName[0]) 56 57 return nil 58 } 59 60 // FixTypeString fixes Type string which is provided 61 // by user and set Default variable. 62 func (f *Flag) fixTypeString() error { 63 switch strings.ToLower(f.TypeString) { 64 case "bool", "b": 65 f.TypeString = TypeStringBool 66 if f.Default == nil { 67 f.Default = false 68 } 69 case "int", "i": 70 f.TypeString = TypeStringInt 71 if f.Default == nil { 72 f.Default = 0 73 } 74 case "string", "str", "s": 75 f.TypeString = TypeStringString 76 if f.Default == nil { 77 f.Default = "" 78 } 79 default: 80 return fmt.Errorf("unexpected type is provided: %s", f.TypeString) 81 } 82 return nil 83 }