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

package pipelines
import (
"encoding/json"
"errors"
)
type StepType int
const (
TypeResizeImageStep StepType = iota
TypeRotateImageStep
TypeFlipImageStep
TypeGrayscaleImageStep
TypeFitImageStep
TypeInvertImageStep
)
type Step struct {
Name string `json:"name" faker:"name"`
Type StepType `json:"type" faker:"-"`
Options json.RawMessage `json:"options"`
}
func (s Step) GetExecutable() (IExecutableStep, error) {
switch s.GetType() {
case TypeResizeImageStep:
step := ResizeImageStep{}
if err := json.Unmarshal(s.Options, &step.Options); err != nil {
return nil, err
}
return step, nil
case TypeRotateImageStep:
step := RotateImageStep{}
if err := json.Unmarshal(s.Options, &step.Options); err != nil {
return nil, err
}
return step, nil
case TypeFlipImageStep:
step := FlipImageStep{}
if err := json.Unmarshal(s.Options, &step.Options); err != nil {
return nil, err
}
return step, nil
case TypeFitImageStep:
step := FitImageStep{}
if err := json.Unmarshal(s.Options, &step.Options); err != nil {
return nil, err
}
return step, nil
case TypeInvertImageStep:
return InvertImageStep{}, nil
case TypeGrayscaleImageStep:
return GrayscaleImageStep{}, nil
}
return nil, errors.New("invalid type")
}
func (s Step) GetType() StepType {
return s.Type
}
func (s Step) GetName() string {
return s.Name
}