-
Notifications
You must be signed in to change notification settings - Fork 92
Expand file tree
/
Copy pathvalue_diff.go
More file actions
94 lines (71 loc) · 1.68 KB
/
value_diff.go
File metadata and controls
94 lines (71 loc) · 1.68 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package diff
import (
"reflect"
)
// ValueDiff describes the changes between a pair of values
type ValueDiff struct {
From any `json:"from" yaml:"from"`
To any `json:"to" yaml:"to"`
}
// Empty indicates whether a change was found in this element
func (diff *ValueDiff) Empty() bool {
return diff == nil
}
func getValueDiff(value1, value2 any) *ValueDiff {
diff := getValueDiffInternal(value1, value2)
if diff.Empty() {
return nil
}
return diff
}
func getValueDiffInternal(value1, value2 any) *ValueDiff {
if reflect.DeepEqual(value1, value2) {
return nil
}
return &ValueDiff{
From: value1,
To: value2,
}
}
func getValueDiffConditional(exclude bool, value1, value2 any) *ValueDiff {
if exclude {
return nil
}
return getValueDiff(value1, value2)
}
func getFloat64RefDiff(valueRef1, valueRef2 *float64) *ValueDiff {
return getValueDiff(derefFloat64(valueRef1), derefFloat64(valueRef2))
}
func getBoolRefDiff(valueRef1, valueRef2 *bool) *ValueDiff {
return getValueDiff(derefBool(valueRef1), derefBool(valueRef2))
}
func getStringRefDiffConditional(exclude bool, valueRef1, valueRef2 *string) *ValueDiff {
return getValueDiffConditional(exclude, derefString(valueRef1), derefString(valueRef2))
}
func getUInt64RefDiff(valueRef1, valueRef2 *uint64) *ValueDiff {
return getValueDiff(derefUInt64(valueRef1), derefUInt64(valueRef2))
}
func derefString(ref *string) any {
if ref == nil {
return nil
}
return *ref
}
func derefBool(ref *bool) any {
if ref == nil {
return nil
}
return *ref
}
func derefFloat64(ref *float64) any {
if ref == nil {
return nil
}
return *ref
}
func derefUInt64(ref *uint64) any {
if ref == nil {
return nil
}
return *ref
}