/
metadata.go
70 lines (53 loc) · 1.54 KB
/
metadata.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
package activity
import (
"encoding/json"
"github.com/project-flogo/core/data"
"github.com/project-flogo/core/data/metadata"
)
type Metadata struct {
*metadata.IOMetadata
Settings map[string]data.TypedValue
}
// UnmarshalJSON overrides the default UnmarshalJSON for TaskEnv
func (md *Metadata) UnmarshalJSON(b []byte) error {
ser := &struct {
Settings []*data.Attribute `json:"settings"`
Input []*data.Attribute `json:"input"`
Output []*data.Attribute `json:"output"`
}{}
if err := json.Unmarshal(b, ser); err != nil {
return err
}
md.IOMetadata = &metadata.IOMetadata{}
md.Settings = make(map[string]data.TypedValue, len(ser.Settings))
md.Input = make(map[string]data.TypedValue, len(ser.Input))
md.Output = make(map[string]data.TypedValue, len(ser.Output))
for _, attr := range ser.Settings {
md.Settings[attr.Name()] = attr
}
for _, attr := range ser.Input {
md.Input[attr.Name()] = attr
}
for _, attr := range ser.Output {
md.Output[attr.Name()] = attr
}
return nil
}
func ToMetadata(mdStructs ...interface{}) *Metadata {
var settings map[string]data.TypedValue
var input map[string]data.TypedValue
var output map[string]data.TypedValue
for _, mdStruct := range mdStructs {
typedMap := metadata.StructToTypedMap(mdStruct)
name := metadata.GetStructName(mdStruct)
switch name {
case "settings":
settings = typedMap
case "input":
input = typedMap
case "output":
output = typedMap
}
}
return &Metadata{Settings: settings, IOMetadata: &metadata.IOMetadata{Input: input, Output: output}}
}