command.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package rest
  2. type IApp interface {
  3. Executer(r *Request) (IExecuter, bool)
  4. }
  5. ///////////////////////////////////////////////
  6. type IValidator interface {
  7. Validate(r *Request) *Response
  8. }
  9. type IExecuter interface {
  10. Execute(r *Request) *Response
  11. }
  12. type ICommand interface {
  13. IValidator
  14. IExecuter
  15. }
  16. ///////////////////////////////////////////////
  17. func NewCommand(validator IValidator, executer IExecuter) *Command {
  18. return &Command{
  19. validator,
  20. executer,
  21. }
  22. }
  23. type Command struct {
  24. validator IValidator
  25. executer IExecuter
  26. }
  27. func (s *Command) Validate(r *Request) *Response {
  28. return s.validator.Validate(r)
  29. }
  30. func (s *Command) Execute(r *Request) *Response {
  31. return s.executer.Execute(r)
  32. }
  33. ///////////////////////////////////////////////
  34. func NewValidator(method func(r *Request) *Response) *Validator {
  35. return &Validator{
  36. method,
  37. }
  38. }
  39. type Validator struct {
  40. method func(r *Request) *Response
  41. }
  42. func (s *Validator) Validate(r *Request) *Response {
  43. return s.method(r)
  44. }
  45. ///////////////////////////////////////////////
  46. func NewExecuter(method func(r *Request) *Response) *Executer {
  47. return &Executer{
  48. method,
  49. }
  50. }
  51. type Executer struct {
  52. method func(r *Request) *Response
  53. }
  54. func (s *Executer) Execute(r *Request) *Response {
  55. return s.method(r)
  56. }