-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcli-ax.tmpl
129 lines (107 loc) · 4.04 KB
/
cli-ax.tmpl
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
////////////////////////////////////////////////////////////////////////////
// Program: {{.Name}}
// Purpose: {{.Desc}}
// Authors: Antonio Sun (c) {{date "Y4"}}, All rights reserved
////////////////////////////////////////////////////////////////////////////
package {{$.PackageName}}
import (
"github.com/go-easygen/cli"
clix "github.com/go-easygen/cli/ext"
)
////////////////////////////////////////////////////////////////////////////
// Constant and data type/structure definitions
//==========================================================================
// {{.Name}}
type rootT struct {
cli.Helper{{range .Options}}
{{.Name}} {{.Type}} `cli:"{{.Flag}}" usage:"{{.Usage}}"{{if eq .Name "Self" }} json:"-" parser:"jsonfile"{{end}}{{if .Value}} dft:"{{.Value}}"{{end}}`{{end}}
}
var root = &cli.Command{
Name: "{{.Name}}",
Desc: "{{.Desc}}\nVersion " + version + " built on " + date,
{{if .Text}} Text: "{{.Text}}"{{if .UsageLead}} +
"\n\n{{.UsageLead}}"{{end}},{{end}}
{{if .Global}} Global: {{.Global}},
{{end}}{{if .Self}} Argv: func() interface{} { t := new(rootT); t.Self = t; return t },
{{else}} Argv: func() interface{} { return new(rootT) },
{{end}} Fn: {{.Name}},
{{if .NumOption}}
NumOption: {{.NumOption}},
{{end}}{{if .NumArg}}
NumArg: {{.NumArg}},
{{end}}{{if .CanSubRoute}}
CanSubRoute: {{.CanSubRoute}},
{{end}}}
// Template for main starts here
////////////////////////////////////////////////////////////////////////////
// Constant and data type/structure definitions
// The OptsT type defines all the configurable options from cli.
// type OptsT struct { {{range .Options}}
// {{.Name}} {{.Type}}{{end}}
// Verbose int
// }
////////////////////////////////////////////////////////////////////////////
// Global variables definitions
// var (
// progname = "{{.Name}}"
// version = "0.1.0"
// date = "{{ date "I" }}"
// rootArgv *rootT
// // Opts store all the configurable options
// Opts OptsT
// )
////////////////////////////////////////////////////////////////////////////
// Function definitions
// Function main
// func main() {
// cli.SetUsageStyle(cli.ManualStyle) // up-down, for left-right, use NormalStyle
// //NOTE: You can set any writer implements io.Writer
// // default writer is os.Stdout
// if err := cli.Root(root,{{range $i, $cmd := .Command}}
// cli.Tree({{$cmd.Name}}Def){{if lt $i ($.Command | len | minus1)}},{{end}}{{end}}).Run(os.Args[1:]); err != nil {
// fmt.Fprintln(os.Stderr, err)
// }
// fmt.Println("")
// }
// Template for main dispatcher starts here
//==========================================================================
// Main dispatcher
// func {{.Name}}(ctx *cli.Context) error {
// ctx.JSON(ctx.RootArgv())
// ctx.JSON(ctx.Argv())
// fmt.Println()
// return nil
// }
// Template for CLI handling starts here
{{range .Command}}
////////////////////////////////////////////////////////////////////////////
// {{.Name}}
// func {{.Name}}CLI(ctx *cli.Context) error {
// rootArgv = ctx.RootArgv().(*rootT)
// argv := ctx.Argv().(*{{.Name}}T)
// fmt.Printf("[{{.Name}}]:\n %+v\n %+v\n %v\n", rootArgv, argv, ctx.Args())
// {{range $.Options}}Opts.{{.Name}}, {{end}}Opts.Verbose =
// {{range $.Options}}rootArgv.{{.Name}}, {{end}}rootArgv.Verbose.Value()
// return nil
// }
type {{.Name}}T struct {
{{range .Options}}
{{.Name}} {{.Type}} `cli:"{{.Flag}}" usage:"{{.Usage}}"{{if eq .Name "Self" }} json:"-" parser:"jsonfile"{{end}}{{if .Value}} dft:"{{.Value}}"{{end}}`{{end}}
}
var {{.Name}}Def = &cli.Command{
Name: "{{.Name}}",
Desc: "{{.Desc}}",
{{if .Text}} Text: "{{.Text}}"{{if .UsageLead}} +
"\n\n{{.UsageLead}}"{{end}},{{end}}
{{if .Self}} Argv: func() interface{} { t := new({{.Name}}T); t.Self = t; return t },
{{else}} Argv: func() interface{} { return new({{.Name}}T) },
{{end}} Fn: {{.Name}}CLI,
{{if .NumOption}}
NumOption: {{.NumOption}},
{{end}}{{if .NumArg}}
NumArg: {{.NumArg}},
CanSubRoute: true,
{{end}}{{if .CanSubRoute}}
CanSubRoute: {{.CanSubRoute}},
{{end}}}
{{end}}