required.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package cli
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/spf13/cobra"
  6. )
  7. // NoArgs validates args and returns an error if there are any args
  8. func NoArgs(cmd *cobra.Command, args []string) error {
  9. if len(args) == 0 {
  10. return nil
  11. }
  12. if cmd.HasSubCommands() {
  13. return fmt.Errorf("\n" + strings.TrimRight(cmd.UsageString(), "\n"))
  14. }
  15. return fmt.Errorf(
  16. "\"%s\" accepts no argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s",
  17. cmd.CommandPath(),
  18. cmd.CommandPath(),
  19. cmd.UseLine(),
  20. cmd.Short,
  21. )
  22. }
  23. // RequiresMinArgs returns an error if there is not at least min args
  24. func RequiresMinArgs(min int) cobra.PositionalArgs {
  25. return func(cmd *cobra.Command, args []string) error {
  26. if len(args) >= min {
  27. return nil
  28. }
  29. return fmt.Errorf(
  30. "\"%s\" requires at least %d argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s",
  31. cmd.CommandPath(),
  32. min,
  33. cmd.CommandPath(),
  34. cmd.UseLine(),
  35. cmd.Short,
  36. )
  37. }
  38. }
  39. // RequiresMaxArgs returns an error if there is not at most max args
  40. func RequiresMaxArgs(max int) cobra.PositionalArgs {
  41. return func(cmd *cobra.Command, args []string) error {
  42. if len(args) <= max {
  43. return nil
  44. }
  45. return fmt.Errorf(
  46. "\"%s\" requires at most %d argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s",
  47. cmd.CommandPath(),
  48. max,
  49. cmd.CommandPath(),
  50. cmd.UseLine(),
  51. cmd.Short,
  52. )
  53. }
  54. }
  55. // RequiresRangeArgs returns an error if there is not at least min args and at most max args
  56. func RequiresRangeArgs(min int, max int) cobra.PositionalArgs {
  57. return func(cmd *cobra.Command, args []string) error {
  58. if len(args) >= min && len(args) <= max {
  59. return nil
  60. }
  61. return fmt.Errorf(
  62. "\"%s\" requires at least %d and at most %d argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s",
  63. cmd.CommandPath(),
  64. min,
  65. max,
  66. cmd.CommandPath(),
  67. cmd.UseLine(),
  68. cmd.Short,
  69. )
  70. }
  71. }
  72. // ExactArgs returns an error if there is not the exact number of args
  73. func ExactArgs(number int) cobra.PositionalArgs {
  74. return func(cmd *cobra.Command, args []string) error {
  75. if len(args) == number {
  76. return nil
  77. }
  78. return fmt.Errorf(
  79. "\"%s\" requires exactly %d argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s",
  80. cmd.CommandPath(),
  81. number,
  82. cmd.CommandPath(),
  83. cmd.UseLine(),
  84. cmd.Short,
  85. )
  86. }
  87. }