-
Notifications
You must be signed in to change notification settings - Fork 34
/
task.go
63 lines (47 loc) · 1007 Bytes
/
task.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package mq
import (
"context"
"github.com/google/uuid"
)
type Task interface {
Subject() string
ID() string
State() TaskState
SetState(TaskState)
}
type TaskUUID string
func (tid *TaskUUID) ID() string {
if *tid == "" {
*tid = TaskUUID(uuid.New().String())
}
return string(*tid)
}
func (tid *TaskUUID) SetID(id string) { *tid = TaskUUID(id) }
type WithArg interface {
Arg() interface{}
}
type SetArg interface {
SetArg(v interface{}) error
}
type TaskHeader struct {
TaskUUID
TaskState
subject string
}
var _ Task = (*TaskHeader)(nil)
func (th *TaskHeader) Subject() string { return th.subject }
func (th *TaskHeader) SetSubject(s string) { th.subject = s }
func NewTaskBoard(tm TaskManager) *TaskBoard { return &TaskBoard{tm} }
type TaskBoard struct {
tm TaskManager
}
func (b *TaskBoard) Dispatch(ch string, t Task) error {
if t == nil {
return nil
}
return b.tm.Push(ch, t)
}
type TaskOperator interface {
Output(ctx context.Context) (interface{}, error)
SetArg
}