The validation module already implemented the composable-rule idiom under its own names (Check/Issue/SubjectContext) and a value-type Validator with duplicated traversal machinery per layer. Renamed the core types to the canonical names (Validation/ValidationError/ValidationErrorCollection/ ValidationContext/BuiltinValidation/AnyValidation), converted Validator to a reference-type class with the two-tier default-rule split, and genericized it over both Subject and Document via a new Traversable protocol so the model and tagged layers share one walk engine instead of two copies. Wired the JSON-representability rule set into the same shape and closed the two missing pieces (unwrap combinator, JSON coverage/config-pin tests).
13 lines
690 B
Swift
13 lines
690 B
Swift
public extension PureYAML.Validation {
|
|
/// Marker for a value a type-directed validation can be applied to. A `Validation<Subject>` fires on
|
|
/// `Subject` values wherever they appear in the traversed tree; this protocol constrains the
|
|
/// subjects so the erased dispatch can filter by runtime type.
|
|
protocol Validatable: Sendable {}
|
|
}
|
|
|
|
extension PureYAML.Model.Value: PureYAML.Validation.Validatable {}
|
|
extension PureYAML.Model.Mapping: PureYAML.Validation.Validatable {}
|
|
extension PureYAML.Model.Key: PureYAML.Validation.Validatable {}
|
|
extension PureYAML.Tagged.Node: PureYAML.Validation.Validatable {}
|
|
extension PureYAML.Tagged.Mapping: PureYAML.Validation.Validatable {}
|