Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions Sources/OpenAPIKit/Validator/Validator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ extension OpenAPI.Document {
/// You can add validations to the validator using the
/// `validating()` instance methods.
///
/// Builtin validations can be removed selectively using the
/// Builtin validations can be removed selectively using the
/// `withoutValidating()` instance methods.
///
/// There are a few default validations that ship with OpenAPIKit but
Expand Down Expand Up @@ -234,23 +234,25 @@ public final class Validator {

/// Add a validation to be performed.
@discardableResult
public func validating<T: Encodable>(_ validation: Validation<T>) -> Self {
public func validating<T: Encodable & Validatable>(_ validation: Validation<T>) -> Self {
customValidations.append(AnyValidation(validation))
return self
}

/// Add one or more builtin validations to be performed.
@_semantics("optimize.no.crossmodule")
@discardableResult
public func validating<each T: Encodable>(_ validations: repeat KeyPath<BuiltinValidation.Type, Validation<each T>>) -> Self {
public func validating<each T: Encodable & Validatable>(_ validations: repeat KeyPath<BuiltinValidation.Type, Validation<each T>>) -> Self {
for validationPath in repeat each validations {
customValidations.append(AnyValidation(BuiltinValidation.self[keyPath: validationPath]))
}
return self
}

/// Remove a builtin validation.
@_semantics("optimize.no.crossmodule")
@discardableResult
public func withoutValidating<each T: Encodable>(_ validations: repeat KeyPath<BuiltinValidation.Type, Validation<each T>>) -> Self {
public func withoutValidating<each T: Encodable & Validatable>(_ validations: repeat KeyPath<BuiltinValidation.Type, Validation<each T>>) -> Self {
for validationPath in repeat each validations {
nonReferenceDefaultValidations.removeAll { $0.description == BuiltinValidation.self[keyPath: validationPath].description }
referenceDefaultValidations.removeAll { $0.description == BuiltinValidation.self[keyPath: validationPath].description }
Expand All @@ -267,7 +269,7 @@ public final class Validator {
/// `ValidationError` is a good general purpose error for this use-case.
///
@discardableResult
public func validating<T: Encodable>(
public func validating<T: Encodable & Validatable>(
_ validate: @escaping (ValidationContext<T>) -> [ValidationError]
) -> Self {
return validating(Validation(check: validate, when: { _ in true }))
Expand All @@ -282,7 +284,7 @@ public final class Validator {
/// - predicate: A function returning `true` if this validator
/// should run against the given value.
///
public func validating<T: Encodable>(
public func validating<T: Encodable & Validatable>(
_ validate: @escaping (ValidationContext<T>) -> [ValidationError],
when predicate: @escaping (ValidationContext<T>) -> Bool
) -> Self {
Expand All @@ -297,7 +299,7 @@ public final class Validator {
/// - validate: The function called to assert a condition. The function should return `false`
/// if the validity check has failed or `true` if everything is valid.
@discardableResult
public func validating<T: Encodable>(
public func validating<T: Encodable & Validatable>(
_ description: String,
check validate: @escaping (ValidationContext<T>) -> Bool
) -> Self {
Expand All @@ -317,7 +319,7 @@ public final class Validator {
/// if the validity check has failed or `true` if everything is valid.
/// - predicate: A condition that must be met for this validation to be applied.
@discardableResult
public func validating<T: Encodable>(
public func validating<T: Encodable & Validatable>(
_ description: String,
check validate: @escaping (ValidationContext<T>) -> Bool,
when predicate: @escaping (ValidationContext<T>) -> Bool
Expand Down
Loading