37 lines
1015 B
Go
37 lines
1015 B
Go
package engine
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/document"
|
|
)
|
|
|
|
var errDiffInspectionUnavailable = errors.New("configkit: diff inspection unavailable")
|
|
|
|
type diffRegion struct {
|
|
path Path
|
|
left *document.Node
|
|
right *document.Node
|
|
}
|
|
|
|
func prepareDiffRegions(left, right *Inspection) ([]diffRegion, error) {
|
|
if left == nil || left.final == nil || right == nil || right.final == nil {
|
|
return nil, errDiffInspectionUnavailable
|
|
}
|
|
|
|
deltas := compareConfigurationValues(left.final, right.final)
|
|
regions := make([]diffRegion, 0, len(deltas))
|
|
for _, delta := range deltas {
|
|
leftNode, leftPresent := documentAtPathWithLookup(left.final, delta.path, left.immutableLookup)
|
|
if !leftPresent {
|
|
leftNode = nil
|
|
}
|
|
rightNode, rightPresent := documentAtPathWithLookup(right.final, delta.path, right.immutableLookup)
|
|
if !rightPresent {
|
|
rightNode = nil
|
|
}
|
|
regions = append(regions, diffRegion{path: delta.path, left: leftNode, right: rightNode})
|
|
}
|
|
return regions, nil
|
|
}
|