Prepare sequence registration preflight
This commit is contained in:
38
internal/engine/sequence_registration.go
Normal file
38
internal/engine/sequence_registration.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package engine
|
||||
|
||||
type sequenceRegistration struct {
|
||||
path Path
|
||||
identityField string
|
||||
}
|
||||
|
||||
type sequencePolicy struct {
|
||||
identityFields map[string]string
|
||||
}
|
||||
|
||||
func compileSequencePolicy(registrations []sequenceRegistration) (sequencePolicy, []Diagnostic) {
|
||||
policy := sequencePolicy{identityFields: make(map[string]string, len(registrations))}
|
||||
var diagnostics []Diagnostic
|
||||
for _, registration := range registrations {
|
||||
path, err := normalizeDestination(registration.path)
|
||||
if err != nil {
|
||||
diagnostics = append(diagnostics, Diagnostic{
|
||||
Code: CodeOptionsInvalid, Severity: SeverityError,
|
||||
Path: registration.path.clone(), Message: "sequence registration path must contain only non-reserved mapping keys",
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
key := path.String()
|
||||
if current, ok := policy.identityFields[key]; ok {
|
||||
if current != registration.identityField {
|
||||
diagnostics = append(diagnostics, Diagnostic{
|
||||
Code: CodeOptionsInvalid, Severity: SeverityError,
|
||||
Path: path, Message: "sequence registrations at one path must use the same identity field",
|
||||
})
|
||||
}
|
||||
continue
|
||||
}
|
||||
policy.identityFields[key] = registration.identityField
|
||||
}
|
||||
return policy, canonicalDiagnostics(diagnostics)
|
||||
}
|
||||
Reference in New Issue
Block a user