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  }