github.com/goonzoid/gcli@v0.2.3-0.20150926213610-155587606ea1/command/flag_flag.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/tcnksm/gcli/skeleton" 8 ) 9 10 const ( 11 // defaultTypeString is default flag type 12 defaultTypeString = "string" 13 ) 14 15 // FlagFlag implements the flag.Value interface and allows multiple 16 // calls to the same variable to append a list. It parses string and set them 17 // as skeleton.Flag. 18 type FlagFlag []skeleton.Flag 19 20 // String 21 func (f *FlagFlag) String() string { 22 return "" 23 } 24 25 // Set parses input string and appends it on FlagdFlag. 26 // Input format must be NAME:TYPE:SYNOPSIS format. 27 func (f *FlagFlag) Set(v string) error { 28 flgStrs := strings.Split(v, ",") 29 30 for _, flgStr := range flgStrs { 31 32 parsedFlgStr := strings.Split(flgStr, ":") 33 if len(parsedFlgStr) > 3 { 34 return fmt.Errorf("flag must be specified by NAME:TYPE:DESCRIPTION format") 35 } 36 37 name := parsedFlgStr[0] 38 typeString := defaultTypeString 39 desc := "" 40 41 if len(parsedFlgStr) > 1 { 42 typeString = parsedFlgStr[1] 43 } 44 45 if len(parsedFlgStr) > 2 { 46 desc = parsedFlgStr[2] 47 48 // Delete unnessary characters 49 // TODO, this should not here..? or extract this as other function 50 desc = strings.Trim(desc, "\"") 51 desc = strings.Trim(desc, "'") 52 53 } 54 55 flag := skeleton.Flag{ 56 LongName: name, 57 TypeString: typeString, 58 Description: desc, 59 } 60 61 // Fix inputs string for using main processing 62 if err := flag.Fix(); err != nil { 63 return err 64 } 65 66 *f = append(*f, flag) 67 } 68 69 return nil 70 }