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.

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