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
|
package command
import (
"flag"
"fmt"
"sort"
"github.com/hashicorp/errwrap"
sockaddr "github.com/hashicorp/go-sockaddr"
"github.com/mitchellh/cli"
)
type RFCListCommand struct {
Ui cli.Ui
// flags is a list of options belonging to this command
flags *flag.FlagSet
}
// Description is the long-form command help.
func (c *RFCListCommand) Description() string {
return `Lists all known RFCs.`
}
// Help returns the full help output expected by `sockaddr -h cmd`
func (c *RFCListCommand) Help() string {
return MakeHelp(c)
}
// InitOpts is responsible for setup of this command's configuration via the
// command line. InitOpts() does not parse the arguments (see parseOpts()).
func (c *RFCListCommand) InitOpts() {
c.flags = flag.NewFlagSet("list", flag.ContinueOnError)
c.flags.Usage = func() { c.Ui.Output(c.Help()) }
}
type rfcNums []uint
func (s rfcNums) Len() int { return len(s) }
func (s rfcNums) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s rfcNums) Less(i, j int) bool { return s[i] < s[j] }
// Run executes this command.
func (c *RFCListCommand) Run(args []string) int {
if len(args) != 0 {
c.Ui.Error(c.Help())
return 1
}
c.InitOpts()
_, err := c.parseOpts(args)
if err != nil {
if errwrap.Contains(err, "flag: help requested") {
return 0
}
return 1
}
var rfcs rfcNums
sockaddr.VisitAllRFCs(func(rfcNum uint, sas sockaddr.SockAddrs) {
rfcs = append(rfcs, rfcNum)
})
sort.Sort(rfcs)
for _, rfcNum := range rfcs {
c.Ui.Output(fmt.Sprintf("%d", rfcNum))
}
return 0
}
// Synopsis returns a terse description used when listing sub-commands.
func (c *RFCListCommand) Synopsis() string {
return `Lists all known RFCs`
}
// Usage is the one-line usage description
func (c *RFCListCommand) Usage() string {
return `sockaddr rfc list`
}
// VisitAllFlags forwards the visitor function to the FlagSet
func (c *RFCListCommand) VisitAllFlags(fn func(*flag.Flag)) {
c.flags.VisitAll(fn)
}
func (c *RFCListCommand) parseOpts(args []string) ([]string, error) {
if err := c.flags.Parse(args); err != nil {
return nil, err
}
return c.flags.Args(), nil
}
|