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  }