summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go')
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go
new file mode 100644
index 000000000..11c1ac365
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/command/rfc_list.go
@@ -0,0 +1,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
+}