Skip to content

[swift6] Add typed throws to Validation functions #20903

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 17, 2025
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ extension NumericRule: Sendable where T: Sendable {}
/// - Parameter string: The String you wish to validate.
/// - Parameter rule: The StringRule you wish to use for validation.
/// - Returns: A validated string.
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule,
/// `NSError` if the rule.pattern is invalid.
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate(_ string: String, against rule: StringRule) throws -> String {
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule or if the rule.pattern is invalid.
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate(_ string: String, against rule: StringRule) throws(ValidationError<StringValidationErrorKind>) -> String {
var error = ValidationError<StringValidationErrorKind>(kinds: [])
if let minLength = rule.minLength, !(minLength <= string.count) {
error.kinds.insert(.minLength)
Expand All @@ -59,9 +58,9 @@ extension NumericRule: Sendable where T: Sendable {}
error.kinds.insert(.maxLength)
}
if let pattern = rule.pattern {
let matches = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let matches = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
.matches(in: string, range: .init(location: 0, length: string.utf16.count))
if matches.isEmpty {
if matches?.isEmpty != false {
error.kinds.insert(.pattern)
}
}
Expand All @@ -76,7 +75,7 @@ extension NumericRule: Sendable where T: Sendable {}
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated integer.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -108,7 +107,7 @@ extension NumericRule: Sendable where T: Sendable {}
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated fractional number.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -140,7 +139,7 @@ extension NumericRule: Sendable where T: Sendable {}
/// - Parameter rule: The ArrayRule you wish to use for validation.
/// - Returns: A validated array.
/// - Throws: `ValidationError<ArrayValidationErrorKind>` if the string is invalid against the rule.
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws -> Array<AnyHashable> {
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws(ValidationError<ArrayValidationErrorKind>) -> Array<AnyHashable> {
var error = ValidationError<ArrayValidationErrorKind>(kinds: [])
if let minItems = rule.minItems, !(minItems <= array.count) {
error.kinds.insert(.minItems)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ public struct Validator {
/// - Parameter string: The String you wish to validate.
/// - Parameter rule: The StringRule you wish to use for validation.
/// - Returns: A validated string.
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule,
/// `NSError` if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws -> String {
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule or if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws(ValidationError<StringValidationErrorKind>) -> String {
var error = ValidationError<StringValidationErrorKind>(kinds: [])
if let minLength = rule.minLength, !(minLength <= string.count) {
error.kinds.insert(.minLength)
Expand All @@ -59,9 +58,9 @@ public struct Validator {
error.kinds.insert(.maxLength)
}
if let pattern = rule.pattern {
let matches = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let matches = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
.matches(in: string, range: .init(location: 0, length: string.utf16.count))
if matches.isEmpty {
if matches?.isEmpty != false {
error.kinds.insert(.pattern)
}
}
Expand All @@ -76,7 +75,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated integer.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -108,7 +107,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated fractional number.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -140,7 +139,7 @@ public struct Validator {
/// - Parameter rule: The ArrayRule you wish to use for validation.
/// - Returns: A validated array.
/// - Throws: `ValidationError<ArrayValidationErrorKind>` if the string is invalid against the rule.
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws -> Array<AnyHashable> {
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws(ValidationError<ArrayValidationErrorKind>) -> Array<AnyHashable> {
var error = ValidationError<ArrayValidationErrorKind>(kinds: [])
if let minItems = rule.minItems, !(minItems <= array.count) {
error.kinds.insert(.minItems)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ public struct Validator {
/// - Parameter string: The String you wish to validate.
/// - Parameter rule: The StringRule you wish to use for validation.
/// - Returns: A validated string.
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule,
/// `NSError` if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws -> String {
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule or if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws(ValidationError<StringValidationErrorKind>) -> String {
var error = ValidationError<StringValidationErrorKind>(kinds: [])
if let minLength = rule.minLength, !(minLength <= string.count) {
error.kinds.insert(.minLength)
Expand All @@ -59,9 +58,9 @@ public struct Validator {
error.kinds.insert(.maxLength)
}
if let pattern = rule.pattern {
let matches = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let matches = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
.matches(in: string, range: .init(location: 0, length: string.utf16.count))
if matches.isEmpty {
if matches?.isEmpty != false {
error.kinds.insert(.pattern)
}
}
Expand All @@ -76,7 +75,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated integer.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -108,7 +107,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated fractional number.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -140,7 +139,7 @@ public struct Validator {
/// - Parameter rule: The ArrayRule you wish to use for validation.
/// - Returns: A validated array.
/// - Throws: `ValidationError<ArrayValidationErrorKind>` if the string is invalid against the rule.
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws -> Array<AnyHashable> {
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws(ValidationError<ArrayValidationErrorKind>) -> Array<AnyHashable> {
var error = ValidationError<ArrayValidationErrorKind>(kinds: [])
if let minItems = rule.minItems, !(minItems <= array.count) {
error.kinds.insert(.minItems)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ public struct Validator {
/// - Parameter string: The String you wish to validate.
/// - Parameter rule: The StringRule you wish to use for validation.
/// - Returns: A validated string.
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule,
/// `NSError` if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws -> String {
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule or if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws(ValidationError<StringValidationErrorKind>) -> String {
var error = ValidationError<StringValidationErrorKind>(kinds: [])
if let minLength = rule.minLength, !(minLength <= string.count) {
error.kinds.insert(.minLength)
Expand All @@ -59,9 +58,9 @@ public struct Validator {
error.kinds.insert(.maxLength)
}
if let pattern = rule.pattern {
let matches = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let matches = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
.matches(in: string, range: .init(location: 0, length: string.utf16.count))
if matches.isEmpty {
if matches?.isEmpty != false {
error.kinds.insert(.pattern)
}
}
Expand All @@ -76,7 +75,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated integer.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -108,7 +107,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated fractional number.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -140,7 +139,7 @@ public struct Validator {
/// - Parameter rule: The ArrayRule you wish to use for validation.
/// - Returns: A validated array.
/// - Throws: `ValidationError<ArrayValidationErrorKind>` if the string is invalid against the rule.
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws -> Array<AnyHashable> {
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws(ValidationError<ArrayValidationErrorKind>) -> Array<AnyHashable> {
var error = ValidationError<ArrayValidationErrorKind>(kinds: [])
if let minItems = rule.minItems, !(minItems <= array.count) {
error.kinds.insert(.minItems)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ public struct Validator {
/// - Parameter string: The String you wish to validate.
/// - Parameter rule: The StringRule you wish to use for validation.
/// - Returns: A validated string.
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule,
/// `NSError` if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws -> String {
/// - Throws: `ValidationError<StringValidationErrorKind>` if the string is invalid against the rule or if the rule.pattern is invalid.
public static func validate(_ string: String, against rule: StringRule) throws(ValidationError<StringValidationErrorKind>) -> String {
var error = ValidationError<StringValidationErrorKind>(kinds: [])
if let minLength = rule.minLength, !(minLength <= string.count) {
error.kinds.insert(.minLength)
Expand All @@ -59,9 +58,9 @@ public struct Validator {
error.kinds.insert(.maxLength)
}
if let pattern = rule.pattern {
let matches = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let matches = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
.matches(in: string, range: .init(location: 0, length: string.utf16.count))
if matches.isEmpty {
if matches?.isEmpty != false {
error.kinds.insert(.pattern)
}
}
Expand All @@ -76,7 +75,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated integer.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & BinaryInteger>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -108,7 +107,7 @@ public struct Validator {
/// - Parameter rule: The NumericRule you wish to use for validation.
/// - Returns: A validated fractional number.
/// - Throws: `ValidationError<NumericValidationErrorKind>` if the numeric is invalid against the rule.
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws -> T {
public static func validate<T: Comparable & FloatingPoint>(_ numeric: T, against rule: NumericRule<T>) throws(ValidationError<NumericValidationErrorKind>) -> T {
var error = ValidationError<NumericValidationErrorKind>(kinds: [])
if let minimum = rule.minimum {
if !rule.exclusiveMinimum, minimum > numeric {
Expand Down Expand Up @@ -140,7 +139,7 @@ public struct Validator {
/// - Parameter rule: The ArrayRule you wish to use for validation.
/// - Returns: A validated array.
/// - Throws: `ValidationError<ArrayValidationErrorKind>` if the string is invalid against the rule.
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws -> Array<AnyHashable> {
public static func validate(_ array: Array<AnyHashable>, against rule: ArrayRule) throws(ValidationError<ArrayValidationErrorKind>) -> Array<AnyHashable> {
var error = ValidationError<ArrayValidationErrorKind>(kinds: [])
if let minItems = rule.minItems, !(minItems <= array.count) {
error.kinds.insert(.minItems)
Expand Down
Loading
Loading