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).
24 lines
667 B
Swift
24 lines
667 B
Swift
public extension PureYAML.Validation {
|
|
/// Collected validation errors, the non-throwing outcome accessor beside the throwing
|
|
/// `Validator.validate(_:strict:)` gate.
|
|
struct Result: Equatable, Sendable {
|
|
public var values: [ValidationError]
|
|
|
|
public init(_ values: [ValidationError] = []) {
|
|
self.values = values
|
|
}
|
|
|
|
public var errors: [ValidationError] {
|
|
values.filter { $0.severity == .error }
|
|
}
|
|
|
|
public var warnings: [ValidationError] {
|
|
values.filter { $0.severity == .warning }
|
|
}
|
|
|
|
public var isValid: Bool {
|
|
errors.isEmpty
|
|
}
|
|
}
|
|
}
|