github.com/WindomZ/go-commander@v1.2.2/action.go (about) 1 package commander 2 3 // The following are ACTION functions, chose one if you like it. 4 type ( 5 Action func(c Context) _Result // default internal function 6 ActionResult func() _Result 7 ActionNormal func(c Context) error 8 ActionSimple func(c Context) 9 ActionNative func() 10 ActionNativeSimple func() error 11 ActionNativeDocopt func(m map[string]interface{}) error 12 ) 13 14 // parseAction handle function to Action type 15 func parseAction(arg interface{}) (a Action) { 16 switch action := arg.(type) { 17 case func(c Context) _Result: // Action 18 a = action 19 case func() _Result: // ActionResult 20 a = func(c Context) _Result { 21 return action() 22 } 23 case func(c Context) error: // ActionNormal 24 a = func(c Context) _Result { 25 if err := action(c); err != nil { 26 return newResultError(err) 27 } 28 return resultPass() 29 } 30 case func(c Context): // ActionSimple 31 a = func(c Context) _Result { 32 action(c) 33 return resultPass() 34 } 35 case func(): // ActionNative 36 a = func(c Context) _Result { 37 action() 38 return resultPass() 39 } 40 case func() error: // ActionNativeSimple 41 a = func(c Context) _Result { 42 if err := action(); err != nil { 43 return newResultError(err) 44 } 45 return resultPass() 46 } 47 case func(m map[string]interface{}) error: // ActionNativeDocopt 48 a = func(c Context) _Result { 49 if err := action(c.Map()); err != nil { 50 return newResultError(err) 51 } 52 return resultPass() 53 } 54 default: 55 a = nil 56 } 57 return 58 } 59 60 // emptyAction if action is empty 61 func emptyAction(a Action) bool { 62 return a == nil 63 }