-
Notifications
You must be signed in to change notification settings - Fork 5
/
multi_definition.go
45 lines (40 loc) · 1.38 KB
/
multi_definition.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
package commandline
import (
"github.com/UiPath/uipathcli/parser"
)
// multiDefinition merges multiple definitions into a single one.
// This enables teams to provide fine-grained specifications for their individual
// micro-services and still provide them under a single command.
type multiDefinition struct{}
func (d multiDefinition) Merge(name string, definitions []*parser.Definition) *parser.Definition {
if len(definitions) == 0 {
return nil
}
operations := []parser.Operation{}
for _, definition := range definitions {
for _, operation := range definition.Operations {
category := d.getCategory(operation, definition)
operations = append(operations, *parser.NewOperation(operation.Name,
operation.Summary,
operation.Description,
operation.Method,
operation.BaseUri,
operation.Route,
operation.ContentType,
operation.Parameters,
operation.Plugin,
operation.Hidden,
category))
}
}
return parser.NewDefinition(name, definitions[0].Description, operations)
}
func (d multiDefinition) getCategory(operation parser.Operation, definition *parser.Definition) *parser.OperationCategory {
if operation.Category == nil || operation.Category.Description != "" {
return operation.Category
}
return parser.NewOperationCategory(operation.Category.Name, definition.Description)
}
func newMultiDefinition() *multiDefinition {
return &multiDefinition{}
}