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  }