/
cli.go
151 lines (130 loc) · 3.06 KB
/
cli.go
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Code generated by goa v3.1.1, DO NOT EDIT.
//
// calc gRPC client CLI support package
//
// Command:
// $ goa gen github.com/DataDog/trace-examples/go/goa-basic/design -o
// $(GOPATH)/src/github.com/DataDog/trace-examples/go/goa-basic
package cli
import (
"flag"
"fmt"
"os"
calcc "github.com/DataDog/trace-examples/go/goa-basic/gen/grpc/calc/client"
goa "goa.design/goa/v3/pkg"
grpc "google.golang.org/grpc"
)
// UsageCommands returns the set of commands and sub-commands using the format
//
// command (subcommand1|subcommand2|...)
//
func UsageCommands() string {
return `calc add
`
}
// UsageExamples produces an example of a valid invocation of the CLI tool.
func UsageExamples() string {
return os.Args[0] + ` calc add --message '{
"a": 8399553735696626949,
"b": 360622074634248926
}'` + "\n" +
""
}
// ParseEndpoint returns the endpoint and payload as specified on the command
// line.
func ParseEndpoint(cc *grpc.ClientConn, opts ...grpc.CallOption) (goa.Endpoint, interface{}, error) {
var (
calcFlags = flag.NewFlagSet("calc", flag.ContinueOnError)
calcAddFlags = flag.NewFlagSet("add", flag.ExitOnError)
calcAddMessageFlag = calcAddFlags.String("message", "", "")
)
calcFlags.Usage = calcUsage
calcAddFlags.Usage = calcAddUsage
if err := flag.CommandLine.Parse(os.Args[1:]); err != nil {
return nil, nil, err
}
if flag.NArg() < 2 { // two non flag args are required: SERVICE and ENDPOINT (aka COMMAND)
return nil, nil, fmt.Errorf("not enough arguments")
}
var (
svcn string
svcf *flag.FlagSet
)
{
svcn = flag.Arg(0)
switch svcn {
case "calc":
svcf = calcFlags
default:
return nil, nil, fmt.Errorf("unknown service %q", svcn)
}
}
if err := svcf.Parse(flag.Args()[1:]); err != nil {
return nil, nil, err
}
var (
epn string
epf *flag.FlagSet
)
{
epn = svcf.Arg(0)
switch svcn {
case "calc":
switch epn {
case "add":
epf = calcAddFlags
}
}
}
if epf == nil {
return nil, nil, fmt.Errorf("unknown %q endpoint %q", svcn, epn)
}
// Parse endpoint flags if any
if svcf.NArg() > 1 {
if err := epf.Parse(svcf.Args()[1:]); err != nil {
return nil, nil, err
}
}
var (
data interface{}
endpoint goa.Endpoint
err error
)
{
switch svcn {
case "calc":
c := calcc.NewClient(cc, opts...)
switch epn {
case "add":
endpoint = c.Add()
data, err = calcc.BuildAddPayload(*calcAddMessageFlag)
}
}
}
if err != nil {
return nil, nil, err
}
return endpoint, data, nil
}
// calcUsage displays the usage of the calc command and its subcommands.
func calcUsage() {
fmt.Fprintf(os.Stderr, `The calc service performs operations on numbers
Usage:
%s [globalflags] calc COMMAND [flags]
COMMAND:
add: Add implements add.
Additional help:
%s calc COMMAND --help
`, os.Args[0], os.Args[0])
}
func calcAddUsage() {
fmt.Fprintf(os.Stderr, `%s [flags] calc add -message JSON
Add implements add.
-message JSON:
Example:
`+os.Args[0]+` calc add --message '{
"a": 8399553735696626949,
"b": 360622074634248926
}'
`, os.Args[0])
}