-
Notifications
You must be signed in to change notification settings - Fork 3
/
workerflow_spec.go
63 lines (52 loc) · 1.54 KB
/
workerflow_spec.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 core
import "encoding/json"
type WorkflowSpec struct {
ColonyName string `json:"colonyname"`
FunctionSpecs []FunctionSpec `json:"functionspecs"`
}
func CreateWorkflowSpec(colonyName string) *WorkflowSpec {
workflowSpec := &WorkflowSpec{ColonyName: colonyName}
return workflowSpec
}
func (workflowSpec *WorkflowSpec) AddFunctionSpec(funcSpec *FunctionSpec) {
workflowSpec.FunctionSpecs = append(workflowSpec.FunctionSpecs, *funcSpec)
}
func ConvertJSONToWorkflowSpec(jsonString string) (*WorkflowSpec, error) {
var workflowSpec *WorkflowSpec
err := json.Unmarshal([]byte(jsonString), &workflowSpec)
if err != nil {
return nil, err
}
return workflowSpec, nil
}
func (workflowSpec *WorkflowSpec) Equals(workflowSpec2 *WorkflowSpec) bool {
same := true
if workflowSpec.ColonyName != workflowSpec2.ColonyName {
same = false
}
if workflowSpec.FunctionSpecs != nil && workflowSpec2.FunctionSpecs == nil {
same = false
} else if workflowSpec.FunctionSpecs == nil && workflowSpec2.FunctionSpecs != nil {
same = false
} else {
counter := 0
for _, funcSpec := range workflowSpec.FunctionSpecs {
for _, funcSpec2 := range workflowSpec2.FunctionSpecs {
if funcSpec.Equals(&funcSpec2) {
counter++
}
}
}
if counter != len(workflowSpec.FunctionSpecs) && counter != len(workflowSpec2.FunctionSpecs) {
same = false
}
}
return same
}
func (workflowSpec *WorkflowSpec) ToJSON() (string, error) {
jsonBytes, err := json.Marshal(workflowSpec)
if err != nil {
return "", err
}
return string(jsonBytes), nil
}