12345678910111213141516171819202122232425262728293031323334353637383940 |
- package detailed
- import (
- "reflect"
- )
- // Diff is returned by TopoDiff. It represents the changes between two
- // NodeSummary maps.
- type Diff struct {
- Add []NodeSummary `json:"add"`
- Update []NodeSummary `json:"update"`
- Remove []string `json:"remove"`
- Reset bool `json:"reset,omitempty"`
- }
- // TopoDiff gives you the diff to get from A to B.
- func TopoDiff(a, b NodeSummaries) Diff {
- diff := Diff{Reset: a == nil}
- notSeen := map[string]struct{}{}
- for k := range a {
- notSeen[k] = struct{}{}
- }
- for k, node := range b {
- if _, ok := a[k]; !ok {
- diff.Add = append(diff.Add, node)
- } else if !reflect.DeepEqual(node, a[k]) {
- diff.Update = append(diff.Update, node)
- }
- delete(notSeen, k)
- }
- // leftover keys
- for k := range notSeen {
- diff.Remove = append(diff.Remove, k)
- }
- return diff
- }
|