@@ -23,65 +23,68 @@ go get -u github.com/meblum/cmd
23
23
## Example usage
24
24
25
25
``` go
26
- package main
27
-
28
26
import (
29
27
" flag"
30
28
" fmt"
31
- " os"
32
29
33
- " github.com/meblum/plane/ cmd"
30
+ " github.com/meblum/cmd"
34
31
)
35
32
36
33
func main () {
34
+ greeter := greetHandler{
35
+ greetType: " hello" ,
36
+ greetName: " Anonymous" ,
37
+ }
37
38
38
- greetCommandName := " greet"
39
- greetType := " hello"
40
- greetName := " Anonymous"
41
-
42
- versionCommandName := " version"
43
- versionVerbose := false
44
-
45
- greetFlagSet := flag.NewFlagSet (greetCommandName, flag.ExitOnError )
46
- greetFlagSet.StringVar (&greetType, " type" , greetType, " greet type (hello|bye)" )
47
- greetFlagSet.StringVar (&greetName, " name" , greetName, " name to print greeting for" )
39
+ greetFlagSet := flag.NewFlagSet (" greet" , flag.ExitOnError )
40
+ greetFlagSet.StringVar (&greeter.greetType , " type" , greeter.greetType , " greet type (hello|bye)" )
41
+ greetFlagSet.StringVar (&greeter.greetName , " name" , greeter.greetName , " name to print greeting for" )
48
42
49
- versionFlagSet := flag.NewFlagSet (versionCommandName, flag.ExitOnError )
50
- versionFlagSet.BoolVar (&versionVerbose, " verbose" , versionVerbose, " output version with additional information" )
43
+ version := versionHandler{
44
+ version: " 1.0.0" ,
45
+ verbose: false ,
46
+ }
51
47
52
- c := &cmd.CommandSet {}
53
- c.Add (" print greeting" , greetFlagSet, false )
54
- c.Add (" print version" , versionFlagSet, false )
48
+ versionFlagSet := flag.NewFlagSet (" version" , flag.ExitOnError )
49
+ versionFlagSet.BoolVar (&version.verbose , " verbose" , version.verbose , " output version with additional information" )
55
50
56
- currSub , _ := c.Parse (os.Args [1 :], flag.ExitOnError )
51
+ c := &cmd.CmdSet {}
52
+ c.Add (" print greeting" , greetFlagSet, greeter, false )
53
+ c.Add (" print version" , versionFlagSet, version, false )
54
+ c.HandleCmd (nil , flag.ExitOnError )
55
+ }
57
56
58
- switch currSub.FlagSet .Name () {
59
- case greetCommandName:
60
- handleGreet (greetType, greetName)
61
- case versionCommandName:
62
- handleVersion (" 1.0.0" , versionVerbose)
63
- }
57
+ type greetHandler struct {
58
+ greetType string
59
+ greetName string
64
60
}
65
61
66
- func handleGreet ( greetType , name string ) {
67
- switch greetType {
62
+ func ( g greetHandler ) Handle ( c * cmd . Cmd ) error {
63
+ switch g. greetType {
68
64
case " hello" :
69
- fmt.Printf (" Hello, %v ! Nice to meet you :)" , name )
65
+ fmt.Printf (" Hello, %v ! Nice to meet you :)" , g. greetName )
70
66
case " bye" :
71
- fmt.Printf (" Hello, %v ! Nice to meet you :)" , name )
67
+ fmt.Printf (" Hello, %v ! Nice to meet you :)" , g. greetName )
72
68
default :
73
- fmt.Print (" invalid greet type, please use 'hello' or 'bye'" )
69
+ return fmt.Errorf (" invalid greet type %v , valid options are 'hello' or 'bye'" , g. greetType )
74
70
}
71
+ return nil
75
72
}
76
73
77
- func handleVersion (version string , verbose bool ) {
78
- if verbose {
79
- fmt.Printf (" You are using Greeter version %v " , version)
80
- return
74
+ type versionHandler struct {
75
+ version string
76
+ verbose bool
77
+ }
78
+
79
+ func (g versionHandler ) Handle (c *cmd .Cmd ) error {
80
+ if g.verbose {
81
+ fmt.Printf (" You are using Greeter version %v " , g.version )
81
82
}
82
- fmt.Print (version)
83
+ fmt.Print (g.version )
84
+ return nil
83
85
}
84
86
87
+
85
88
```
86
89
87
90
See the [ documentation] [ godev ] for more information.
0 commit comments