@@ -29,23 +29,39 @@ type Fn struct {
29
29
// PUBLIC METHODS
30
30
31
31
func (c * Cmd ) Get (args []string ) (* Fn , error ) {
32
+ // Get the command function
33
+ var fn * Fn
34
+ var nargs uint
32
35
if len (args ) == 0 {
33
- return nil , fmt .Errorf ("missing command" )
36
+ fn = c .getFn ("" )
37
+ } else {
38
+ fn = c .getFn (args [0 ])
39
+ nargs = uint (len (args ) - 1 )
34
40
}
35
- name := args [0 ]
36
- nargs := uint (len (args [1 :]))
41
+ if fn == nil {
42
+ // No arguments and no default command
43
+ return nil , nil
44
+ }
45
+
46
+ // Check number of arguments
47
+ if fn .MinArgs != 0 && nargs < fn .MinArgs {
48
+ return nil , fmt .Errorf ("not enough arguments for %q" , fn .Name )
49
+ } else if nargs > fn .MaxArgs {
50
+ return nil , fmt .Errorf ("too many arguments for %q" , fn .Name )
51
+ }
52
+
53
+ // Return the command
54
+ return fn , nil
55
+ }
56
+
57
+ ///////////////////////////////////////////////////////////////////////////////
58
+ // PRIVATE METHODS
59
+
60
+ func (c * Cmd ) getFn (name string ) * Fn {
37
61
for _ , fn := range c .Fn {
38
- if fn .Name != name {
39
- continue
40
- }
41
- // Check number of arguments
42
- if fn .MinArgs != 0 && nargs < fn .MinArgs {
43
- return nil , fmt .Errorf ("not enough arguments for %q" , fn .Name )
44
- } else if nargs > fn .MaxArgs {
45
- return nil , fmt .Errorf ("too many arguments for %q" , fn .Name )
62
+ if fn .Name == name {
63
+ return & fn
46
64
}
47
- // Return the command
48
- return & fn , nil
49
65
}
50
- return nil , fmt . Errorf ( "unknown command: %q" , name )
66
+ return nil
51
67
}
0 commit comments