summaryrefslogtreecommitdiff
path: root/cmd/podman/validate
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/podman/validate')
-rw-r--r--cmd/podman/validate/args.go32
-rw-r--r--cmd/podman/validate/choice.go46
2 files changed, 78 insertions, 0 deletions
diff --git a/cmd/podman/validate/args.go b/cmd/podman/validate/args.go
new file mode 100644
index 000000000..14b4d7897
--- /dev/null
+++ b/cmd/podman/validate/args.go
@@ -0,0 +1,32 @@
+package validate
+
+import (
+ "fmt"
+
+ "github.com/pkg/errors"
+ "github.com/spf13/cobra"
+)
+
+// NoArgs returns an error if any args are included.
+func NoArgs(cmd *cobra.Command, args []string) error {
+ if len(args) > 0 {
+ return fmt.Errorf("`%s` takes no arguments", cmd.CommandPath())
+ }
+ return nil
+}
+
+// SubCommandExists returns an error if no sub command is provided
+func SubCommandExists(cmd *cobra.Command, args []string) error {
+ if len(args) > 0 {
+ return errors.Errorf("unrecognized command `%[1]s %[2]s`\nTry '%[1]s --help' for more information.", cmd.CommandPath(), args[0])
+ }
+ return errors.Errorf("missing command '%[1]s COMMAND'\nTry '%[1]s --help' for more information.", cmd.CommandPath())
+}
+
+// IdOrLatestArgs used to validate a nameOrId was provided or the "--latest" flag
+func IdOrLatestArgs(cmd *cobra.Command, args []string) error {
+ if len(args) > 1 || (len(args) == 0 && !cmd.Flag("latest").Changed) {
+ return fmt.Errorf("`%s` requires a name, id or the \"--latest\" flag", cmd.CommandPath())
+ }
+ return nil
+}
diff --git a/cmd/podman/validate/choice.go b/cmd/podman/validate/choice.go
new file mode 100644
index 000000000..572c5f4a5
--- /dev/null
+++ b/cmd/podman/validate/choice.go
@@ -0,0 +1,46 @@
+package validate
+
+import (
+ "fmt"
+ "strings"
+)
+
+// Honors cobra.Value interface
+type choiceValue struct {
+ value *string
+ choices []string
+}
+
+// ChoiceValue may be used in cobra FlagSet methods Var/VarP/VarPF() to select from a set of values
+//
+// Example:
+// created := validate.ChoiceValue(&opts.Sort, "command", "created", "id", "image", "names", "runningfor", "size", "status")
+// flags.Var(created, "sort", "Sort output by: "+created.Choices())
+func ChoiceValue(p *string, choices ...string) *choiceValue {
+ return &choiceValue{
+ value: p,
+ choices: choices,
+ }
+}
+
+func (c *choiceValue) String() string {
+ return *c.value
+}
+
+func (c *choiceValue) Set(value string) error {
+ for _, v := range c.choices {
+ if v == value {
+ *c.value = value
+ return nil
+ }
+ }
+ return fmt.Errorf("%q is not a valid value. Choose from: %q", value, c.Choices())
+}
+
+func (c *choiceValue) Choices() string {
+ return strings.Join(c.choices, ", ")
+}
+
+func (c *choiceValue) Type() string {
+ return "choice"
+}