Micro-service for file storage and processing written in Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.5 KiB

  1. package pipelines
  2. import (
  3. "encoding/json"
  4. "errors"
  5. )
  6. type StepType int
  7. const (
  8. TypeResizeImageStep StepType = iota
  9. TypeRotateImageStep
  10. TypeFlipImageStep
  11. TypeGrayscaleImageStep
  12. TypeFitImageStep
  13. TypeInvertImageStep
  14. TypeBlurImageStep
  15. )
  16. type Step struct {
  17. Name string `json:"name" faker:"name"`
  18. Type StepType `json:"type" faker:"-"`
  19. Options json.RawMessage `json:"options"`
  20. }
  21. func (s Step) GetExecutable() (IExecutableStep, error) {
  22. switch s.GetType() {
  23. case TypeResizeImageStep:
  24. step := ResizeImageStep{}
  25. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  26. return nil, err
  27. }
  28. return step, nil
  29. case TypeRotateImageStep:
  30. step := RotateImageStep{}
  31. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  32. return nil, err
  33. }
  34. return step, nil
  35. case TypeFlipImageStep:
  36. step := FlipImageStep{}
  37. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  38. return nil, err
  39. }
  40. return step, nil
  41. case TypeFitImageStep:
  42. step := FitImageStep{}
  43. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  44. return nil, err
  45. }
  46. return step, nil
  47. case TypeInvertImageStep:
  48. return InvertImageStep{}, nil
  49. case TypeGrayscaleImageStep:
  50. return GrayscaleImageStep{}, nil
  51. case TypeBlurImageStep:
  52. step := BlurImageStep{}
  53. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  54. return nil, err
  55. }
  56. return step, nil
  57. }
  58. return nil, errors.New("invalid type")
  59. }
  60. func (s Step) GetType() StepType {
  61. return s.Type
  62. }
  63. func (s Step) GetName() string {
  64. return s.Name
  65. }