forked from Jonathan-Rosenberg/oasdiff
-
Notifications
You must be signed in to change notification settings - Fork 1
/
link_diff.go
49 lines (40 loc) · 2.04 KB
/
link_diff.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
package diff
import (
"github.com/getkin/kin-openapi/openapi3"
"github.com/treeverse/oasdiff/utils"
)
// LinkDiff describes the changes between a pair of link objects: https://swagger.io/specification/#link-object
type LinkDiff struct {
ExtensionsDiff *ExtensionsDiff `json:"extensions,omitempty" yaml:"extensions,omitempty"`
OperationIDDiff *ValueDiff `json:"operationId,omitempty" yaml:"operationId,omitempty"`
OperationRefDiff *ValueDiff `json:"operationRef,omitempty" yaml:"operationRef,omitempty"`
DescriptionDiff *ValueDiff `json:"description,omitempty" yaml:"description,omitempty"`
ParametersDiff *InterfaceMapDiff `json:"parameters,omitempty" yaml:"parameters,omitempty"`
ServerDiff *ServerDiff `json:"server,omitempty" yaml:"server,omitempty"`
RequestBodyDiff *ValueDiff `json:"requestBody,omitempty" yaml:"requestBody,omitempty"`
}
// Empty indicates whether a change was found in this element
func (diff *LinkDiff) Empty() bool {
return diff == nil || *diff == LinkDiff{}
}
func getLinkDiff(config *Config, state *state, link1, link2 *openapi3.Link) (*LinkDiff, error) {
diff, err := getLinkDiffInternal(config, state, link1, link2)
if err != nil {
return nil, err
}
if diff.Empty() {
return nil, nil
}
return diff, nil
}
func getLinkDiffInternal(config *Config, state *state, link1, link2 *openapi3.Link) (*LinkDiff, error) {
result := LinkDiff{}
result.ExtensionsDiff = getExtensionsDiff(config, state, link1.Extensions, link2.Extensions)
result.OperationIDDiff = getValueDiff(link1.OperationID, link2.OperationID)
result.OperationRefDiff = getValueDiff(link1.OperationRef, link2.OperationRef)
result.DescriptionDiff = getValueDiffConditional(config.IsExcludeDescription(), link1.Description, link2.Description)
result.ParametersDiff = getInterfaceMapDiff(link1.Parameters, link2.Parameters, utils.StringSet{})
result.ServerDiff = getServerDiff(config, state, link1.Server, link2.Server)
result.RequestBodyDiff = getValueDiff(link1.RequestBody, link2.RequestBody)
return &result, nil
}