-
Notifications
You must be signed in to change notification settings - Fork 33
/
action.go
73 lines (56 loc) · 2.06 KB
/
action.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
64
65
66
67
68
69
70
71
72
73
package action
import (
"context"
"fmt"
"github.com/TIBCOSoftware/flogo-lib/core/data"
)
// Action is an action to perform as a result of a trigger
type Action interface {
// Metadata get the Action's metadata
Metadata() *Metadata
// IOMetadata get the Action's IO metadata
IOMetadata() *data.IOMetadata
}
// SyncAction is a synchronous action to perform as a result of a trigger
type SyncAction interface {
Action
// Run this Action
Run(context context.Context, inputs map[string]*data.Attribute) (map[string]*data.Attribute, error)
}
// AsyncAction is an asynchronous action to perform as a result of a trigger, the action can asynchronously
// return results as it runs. It returns immediately, but will continue to run.
type AsyncAction interface {
Action
// Run this Action
Run(context context.Context, inputs map[string]*data.Attribute, handler ResultHandler) error
}
// Factory is used to create new instances for an action
type Factory interface {
// New create a new Action
New(config *Config) (Action, error)
}
// GetMetadata method to ensure we have metadata, remove in future
func GetMetadata(act Action) *Metadata {
if act.Metadata() == nil {
_, async := act.(AsyncAction)
return &Metadata{ID: fmt.Sprintf("%T", act), Async: async}
} else {
return act.Metadata()
}
}
// Runner runs actions
type Runner interface {
// Deprecated: Use Execute() instead
Run(context context.Context, act Action, uri string, options interface{}) (code int, data interface{}, err error)
// Deprecated: Use Execute() instead
RunAction(ctx context.Context, act Action, options map[string]interface{}) (results map[string]*data.Attribute, err error)
// Execute the specified Action
Execute(ctx context.Context, act Action, inputs map[string]*data.Attribute) (results map[string]*data.Attribute, err error)
}
// ResultHandler used to handle results from the Action
type ResultHandler interface {
// HandleResult is invoked when there are results available
HandleResult(results map[string]*data.Attribute, err error)
// Done indicates that the action has completed
Done()
}