github.com/wallyqs/gcli@v0.2.3-0.20151010121825-a114d5d1758d/skeleton/resource/tmpl/flag/cli.go.tmpl (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"flag"
     7  )
     8  
     9  // Exit codes are int values that represent an exit code for a particular error.
    10  const (
    11  	ExitCodeOK    int = 0
    12  	ExitCodeError int = 1 + iota
    13  )
    14  
    15  // CLI is the command line object
    16  type CLI struct {
    17  	// outStream and errStream are the stdout and stderr
    18  	// to write message from the CLI.
    19  	outStream, errStream io.Writer
    20  }
    21  
    22  // Run invokes the CLI with the given arguments.
    23  func (cli *CLI) Run(args []string) int {
    24      var (
    25  		{{ range .Flags }}{{ .Name }} {{ .TypeString }}
    26          {{ end }}
    27      )
    28      
    29  	// Define option flag parse
    30  	flags := flag.NewFlagSet(Name, flag.ContinueOnError)
    31      flags.SetOutput(cli.errStream)
    32  
    33      {{ range .Flags }}{{ if eq .TypeString "string" }}flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .LongName }}", "{{ .Default }}", "{{ .Description }}")
    34      flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .ShortName }}", "{{ .Default }}", "{{ .Description }}(Short)")
    35      {{ else }}flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .LongName }}", {{ .Default }}, "{{ .Description }}")
    36      flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .ShortName }}", {{ .Default }}, "{{ .Description }}(Short)"){{ end }}
    37      {{ end }}
    38  	flVersion := flags.Bool("version", false, "Print version information and quit.")
    39  
    40  	// Parse commandline flag
    41  	if err := flags.Parse(args[1:]); err != nil {
    42  		return ExitCodeError
    43  	}
    44  
    45  	// Show version
    46  	if *flVersion {
    47  		fmt.Fprintf(cli.errStream, "%s version %s\n", Name, Version)
    48  		return ExitCodeOK
    49  	}
    50  
    51  	{{ range .Flags }}
    52  	_ = {{ .Name }}
    53  	{{ end }}
    54  
    55  	return ExitCodeOK
    56  }