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.

72 lines
1.4 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. )
  15. type Step struct {
  16. Name string `json:"name" faker:"name"`
  17. Type StepType `json:"type" faker:"-"`
  18. Options json.RawMessage `json:"options"`
  19. }
  20. func (s Step) GetExecutable() (IExecutableStep, error) {
  21. switch s.GetType() {
  22. case TypeResizeImageStep:
  23. step := ResizeImageStep{}
  24. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  25. return nil, err
  26. }
  27. return step, nil
  28. case TypeRotateImageStep:
  29. step := RotateImageStep{}
  30. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  31. return nil, err
  32. }
  33. return step, nil
  34. case TypeFlipImageStep:
  35. step := FlipImageStep{}
  36. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  37. return nil, err
  38. }
  39. return step, nil
  40. case TypeFitImageStep:
  41. step := FitImageStep{}
  42. if err := json.Unmarshal(s.Options, &step.Options); err != nil {
  43. return nil, err
  44. }
  45. return step, nil
  46. case TypeInvertImageStep:
  47. return InvertImageStep{}, nil
  48. case TypeGrayscaleImageStep:
  49. return GrayscaleImageStep{}, nil
  50. }
  51. return nil, errors.New("invalid type")
  52. }
  53. func (s Step) GetType() StepType {
  54. return s.Type
  55. }
  56. func (s Step) GetName() string {
  57. return s.Name
  58. }