aboutsummaryrefslogtreecommitdiff
path: root/cmd/cmd.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/cmd.go')
-rw-r--r--cmd/cmd.go57
1 files changed, 41 insertions, 16 deletions
diff --git a/cmd/cmd.go b/cmd/cmd.go
index e2f0cf4..725aaea 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -17,34 +17,59 @@
* the License.
*/
-// Package cmd is the common library for writing fscrypt command line binaries.
+// Package cmd is the common library for writing command line binaries.
// This package is mainly a wrapper around github.com/urfave/cli, but provides
// additional support to make the usage look similar to the man page.
//
-// The main componets are the `Cmd` and `Flag` types which can be used to define
-// a top-level command with many potential subcommands. This package also
-// presents a smaller interface than urfave/cli, making it easier to use for
-// other commands.
+// The main componets are the `Cmd`, `Argument`, and `Flag` types which can be
+// used to define a top-level command with many potential subcommands. This
+// package also presents a smaller interface than urfave/cli, making it easier
+// to use for other commands.
package cmd
+import "os"
+
// Command represents a command with many potential top-level commands. This is
-// trand
-type Cmd struct {
- Name string
+// transformed into a cli.Command in Run().
+type Command struct {
+ Name string
UsageLines []string
- SubCmds []Cmd
- Arguments []Argument
- Flags []cli.Flag
- Man *ManEntry
- Action CommandFunc
+ SubCmds []*Command
+ Arguments []*Argument
+ Flags []Flag
+ ManPage *ManEntry
+ Action CommandFunc
}
+// Argument represents a parameter passed to a function. It has an optional
+// usage explains how it should be used.
type Argument struct {
- Name string
- Usage string
+ ArgName string
+ Usage string
}
+// ManEntry represents an entry in a man page with a name, section, and title.
type ManEntry struct {
- Title string
+ Name string
Section int
+ Title string
+}
+
+// CommandFunc contains the implementation of a command. The provided args have
+// the flags and leading command names removed. If a normal error is returned,
+// it is printed out (with an optional explanation) and exits with FailureCode.
+// If a usage error is returned, it is printed out with the command's usage and
+// exits with UsageFailureCode. Returning nil causes an exit with success.
+type CommandFunc func(args []string) error
+
+// Run executes the command with os.Args, equivalent to c.RunArgs(os.Args).
+func (c *Command) Run() {
+ c.RunArgs(os.Args)
+}
+
+// RunArgs executes the command with the provided args. If the Name argument is
+// empty, args[0]'s basename is used instead. If the command fails, this method
+// will not return.
+func (c *Command) RunArgs(args []string) {
+ // TODO(joerichey): Implement conversion to cli.Command
}