File: commandlineFlag.tmpl

package info (click to toggle)
easygen 5.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 848 kB
  • sloc: sh: 14; makefile: 13
file content (89 lines) | stat: -rw-r--r-- 3,354 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// !!! !!!
// WARNING: Code automatically generated. Editing discouraged.
// !!! !!!

package {{.PackageName}}

import (
	"flag"
	"fmt"
	"os"
)

////////////////////////////////////////////////////////////////////////////
// Constant and data type/structure definitions

const progname = "{{.ProgramName}}" // os.Args[0]

// The {{.StructName}} struct defines the structure to hold the commandline values
type {{.StructName}} struct { {{range .Options}}{{if ne .Name "SEPARATOR" }}
	{{.Name}}		{{ if eq .Type "duration" }}time.Duration{{else}}{{.Type}}{{end}}	// {{.Usage}}{{end}}{{end}}
}

////////////////////////////////////////////////////////////////////////////
// Global variables definitions

// {{.StructVar}} holds the actual values from the command line parameters
var {{.StructVar}} {{.StructName}}

////////////////////////////////////////////////////////////////////////////
// Commandline definitions

func initVars() {

	// set default values for command line parameters{{range .Options}}{{if eq .Name "SEPARATOR" }}

{{else}}{{if (stringsContains .Flag ",")}}{{$cf := .}}{{range (stringsSplit .Flag ",")}}
	flag.{{clk2uc $cf.Type}}Var(&{{$.StructVar}}.{{$cf.Name}}, "{{.}}", {{$cf.Value}},
		"{{$cf.Usage}}"){{end}}{{else}}
	flag.{{clk2uc .Type}}Var(&{{$.StructVar}}.{{.Name}}, "{{.Flag}}", {{.Value}},
		"{{.Usage}}"){{end}}{{end}}{{end}}
}

func initVals() {
	exists := false
	// Now override those default values from environment variables{{range .Options}}{{if eq .Name "SEPARATOR" }}

{{else}}{{$envVar := printf "%s_%s" (clk2ss $.ProgramName) (clk2ss .Flag)}}{{if eq .Type "string" }}{{if (stringsContains .Flag ",")}}{{$cf := .}}{{range (stringsSplit .Flag ",")}}{{$envVar := printf "%s_%s" (clk2ss $.ProgramName) (clk2ss .)}}
	if len({{$.StructVar}}.{{$cf.Name}}) == 0 &&
		len(os.Getenv("{{$envVar}}")) != 0 {
		{{$.StructVar}}.{{$cf.Name}} = os.Getenv("{{$envVar}}")
	}{{end}}{{else}}
	if len({{$.StructVar}}.{{.Name}}) == 0 &&
		len(os.Getenv("{{$envVar}}")) != 0 {
		{{$.StructVar}}.{{.Name}} = os.Getenv("{{$envVar}}")
	}{{end}}{{else}}{{if eq .Type "bool" }}
	if _, exists = os.LookupEnv("{{$envVar}}"); {{$.StructVar}}.{{.Name}}|| exists {
		{{$.StructVar}}.{{.Name}} = true
	}{{else}}{{if eq .Type "int" }}{{if (stringsContains .Flag ",")}}{{$cf := .}}{{range (stringsSplit .Flag ",")}}{{$envVar := printf "%s_%s" (clk2ss $.ProgramName) (clk2ss .)}}
	if {{$.StructVar}}.{{$cf.Name}} == 0 &&
		len(os.Getenv("{{$envVar}}")) != 0 {
		if i, err := strconv.Atoi(os.Getenv("{{$envVar}}")); err == nil {
			{{$.StructVar}}.{{$cf.Name}} = i
		}
	}{{end}}{{else}}
	if {{$.StructVar}}.{{.Name}} == 0 &&
		len(os.Getenv("{{$envVar}}")) != 0 {
		if i, err := strconv.Atoi(os.Getenv("{{$envVar}}")); err == nil {
			{{$.StructVar}}.{{.Name}} = i
		}
	}{{end}}{{end}}{{end}}{{end}}{{end}}{{end}}

}

{{if eqf .UsageSummary "True" }}
const usageSummary = "{{range .Options}}{{if eq .Name "SEPARATOR" }}\n{{else}}{{$envVar := printf "%s_%s" (clk2ss $.ProgramName) (clk2ss .Flag)}}  -{{.Flag}}\t{{.Usage}} ({{$envVar}})\n{{end}}{{end}}\nDetails:\n\n"
{{end}}

// Usage function shows help on commandline usage
func Usage() {
	fmt.Fprintf(os.Stderr,
		"{{.UsageLead}}",
		progname){{if eq .UsageSummary "TRUE" }}
	fmt.Fprintf(os.Stderr, usageSummary){{end}}
	flag.PrintDefaults()
	fmt.Fprintf(os.Stderr,
		"{{.UsageEnd}}")
	os.Exit(0)
}