@@ -133,6 +133,24 @@ type WorkflowMap struct {
133133 CollectNode * CollectWorkflowMapNode `json:"collect"yaml:"collect"`
134134}
135135
136+ func (w * WorkflowMap ) UnmarshalJSON (data []byte ) error {
137+ t := make (map [string ]json.RawMessage )
138+ if err := json .Unmarshal (data , & t ); err != nil {
139+ return err
140+ }
141+ for k , v := range t {
142+ switch k {
143+ case "collect" :
144+ if err := json .Unmarshal (v , & w .CollectNode ); err != nil {
145+ return err
146+ }
147+ default :
148+ return fmt .Errorf ("Unrecognized key '%v' in workflow of task." , k )
149+ }
150+ }
151+ return nil
152+ }
153+
136154func NewWorkflowMap () * WorkflowMap {
137155 w := & WorkflowMap {}
138156 c := & CollectWorkflowMapNode {
@@ -159,6 +177,40 @@ type CollectWorkflowMapNode struct {
159177 PublishNodes []PublishWorkflowMapNode `json:"publish,omitempty"yaml:"publish"`
160178}
161179
180+ func (cw * CollectWorkflowMapNode ) UnmarshalJSON (data []byte ) error {
181+ t := make (map [string ]json.RawMessage )
182+ if err := json .Unmarshal (data , & t ); err != nil {
183+ return err
184+ }
185+ for k , v := range t {
186+ switch k {
187+ case "metrics" :
188+ if err := json .Unmarshal (v , & cw .Metrics ); err != nil {
189+ return err
190+ }
191+ case "config" :
192+ if err := json .Unmarshal (v , & cw .Config ); err != nil {
193+ return fmt .Errorf ("%v (while parsing 'config')" , err )
194+ }
195+ case "tags" :
196+ if err := json .Unmarshal (v , & cw .Tags ); err != nil {
197+ return fmt .Errorf ("%v (while parsing 'tags')" , err )
198+ }
199+ case "process" :
200+ if err := json .Unmarshal (v , & cw .ProcessNodes ); err != nil {
201+ return err
202+ }
203+ case "publish" :
204+ if err := json .Unmarshal (v , & cw .PublishNodes ); err != nil {
205+ return err
206+ }
207+ default :
208+ return fmt .Errorf ("Unrecognized key '%v' in collect workflow of task." , k )
209+ }
210+ }
211+ return nil
212+ }
213+
162214func (c * CollectWorkflowMapNode ) GetMetrics () []Metric {
163215 metrics := make ([]Metric , len (c .Metrics ))
164216 i := 0
@@ -240,6 +292,45 @@ type ProcessWorkflowMapNode struct {
240292 Target string `json:"target"yaml:"target"`
241293}
242294
295+ func (pw * ProcessWorkflowMapNode ) UnmarshalJSON (data []byte ) error {
296+ t := make (map [string ]json.RawMessage )
297+ if err := json .Unmarshal (data , & t ); err != nil {
298+ return err
299+ }
300+ for k , v := range t {
301+ switch k {
302+ case "plugin_name" :
303+ if err := json .Unmarshal (v , & pw .Name ); err != nil {
304+ return fmt .Errorf ("%v (while parsing 'plugin_name')" , err )
305+ }
306+ case "plugin_version" :
307+ if err := json .Unmarshal (v , & pw .Version ); err != nil {
308+ return fmt .Errorf ("%v (while parsing 'plugin_version')" , err )
309+ }
310+ case "process" :
311+ if err := json .Unmarshal (v , & pw .ProcessNodes ); err != nil {
312+ return err
313+ }
314+ case "publish" :
315+ if err := json .Unmarshal (v , & pw .PublishNodes ); err != nil {
316+ return err
317+ }
318+ case "config" :
319+ if err := json .Unmarshal (v , & pw .Config ); err != nil {
320+ return fmt .Errorf ("%v (while parsing 'config')" , err )
321+ }
322+ case "target" :
323+ if err := json .Unmarshal (v , & pw .Target ); err != nil {
324+ return fmt .Errorf ("%v (while parsing 'target')" , err )
325+ }
326+ default :
327+ return fmt .Errorf ("Unrecognized key '%v' in process workflow of task." , k )
328+ }
329+ }
330+ return nil
331+
332+ }
333+
243334func NewProcessNode (name string , version int ) * ProcessWorkflowMapNode {
244335 p := & ProcessWorkflowMapNode {
245336 Name : name ,
@@ -282,6 +373,36 @@ type PublishWorkflowMapNode struct {
282373 Target string `json:"target"yaml:"target"`
283374}
284375
376+ func (pw * PublishWorkflowMapNode ) UnmarshalJSON (data []byte ) error {
377+ t := make (map [string ]json.RawMessage )
378+ if err := json .Unmarshal (data , & t ); err != nil {
379+ return err
380+ }
381+ for k , v := range t {
382+ switch k {
383+ case "plugin_name" :
384+ if err := json .Unmarshal (v , & pw .Name ); err != nil {
385+ return fmt .Errorf ("%v (while parsing 'plugin_name')" , err )
386+ }
387+ case "plugin_version" :
388+ if err := json .Unmarshal (v , & pw .Version ); err != nil {
389+ return fmt .Errorf ("%v (while parsing 'plugin_version')" , err )
390+ }
391+ case "config" :
392+ if err := json .Unmarshal (v , & pw .Config ); err != nil {
393+ return fmt .Errorf ("%v (while parsing 'config')" , err )
394+ }
395+ case "target" :
396+ if err := json .Unmarshal (v , & pw .Target ); err != nil {
397+ return fmt .Errorf ("%v (while parsing 'target')" , err )
398+ }
399+ default :
400+ return fmt .Errorf ("Unrecognized key '%v' in publish workflow of task." , k )
401+ }
402+ }
403+ return nil
404+ }
405+
285406func NewPublishNode (name string , version int ) * PublishWorkflowMapNode {
286407 p := & PublishWorkflowMapNode {
287408 Name : name ,
@@ -308,6 +429,24 @@ type metricInfo struct {
308429 Version_ int `json:"version"yaml:"version"`
309430}
310431
432+ func (m * metricInfo ) UnmarshalJSON (data []byte ) error {
433+ t := make (map [string ]json.RawMessage )
434+ if err := json .Unmarshal (data , & t ); err != nil {
435+ return err
436+ }
437+ for k , v := range t {
438+ switch k {
439+ case "version" :
440+ if err := json .Unmarshal (v , & m .Version_ ); err != nil {
441+ return fmt .Errorf ("%v (while parsing 'version')" , err )
442+ }
443+ default :
444+ return fmt .Errorf ("Unrecognized key '%v' in metrics in collect workflow of task" , k )
445+ }
446+ }
447+ return nil
448+ }
449+
311450type Metric struct {
312451 namespace []string
313452 version int
0 commit comments