Files
spyda/internal/base_task.go
2021-02-02 13:13:12 +10:00

65 lines
1.1 KiB
Go

package internal
import (
"fmt"
"github.com/renstrom/shortuuid"
)
type BaseTask struct {
state TaskState
data TaskData
err error
id string
}
func NewBaseTask() *BaseTask {
return &BaseTask{
data: make(TaskData),
id: shortuuid.New(),
}
}
func (t *BaseTask) SetState(state TaskState) {
t.state = state
}
func (t *BaseTask) SetData(key, val string) {
if t.data == nil {
t.data = make(TaskData)
}
t.data[key] = val
}
func (t *BaseTask) Done() {
if t.err != nil {
t.state = TaskStateFailed
} else {
t.state = TaskStateComplete
}
}
func (t *BaseTask) Fail(err error) error {
t.err = err
return err
}
func (t *BaseTask) Result() TaskResult {
stateStr := t.state.String()
errStr := ""
if t.err != nil {
errStr = t.err.Error()
}
return TaskResult{
State: stateStr,
Error: errStr,
Data: t.data,
}
}
func (t *BaseTask) String() string { return fmt.Sprintf("%T: %s", t, t.ID()) }
func (t *BaseTask) ID() string { return t.id }
func (t *BaseTask) State() TaskState { return t.state }
func (t *BaseTask) Error() error { return t.err }