-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathComparisonValidationRule.swift
More file actions
91 lines (77 loc) · 2.68 KB
/
ComparisonValidationRule.swift
File metadata and controls
91 lines (77 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//
// Validator
// Copyright © 2025 Space Code. All rights reserved.
//
/// A validation rule that checks input against a comparison constraint.
///
/// Supports comparisons such as:
/// - `>` (greater than)
/// - `>=` (greater than or equal to)
/// - `<` (less than)
/// - `<=` (less than or equal to)
///
/// # Examples:
/// ```swift
/// let rule1 = ComparisonValidationRule(greaterThan: 0, error: "Must be greater than 0")
/// rule1.validate(input: 5) // true
/// rule1.validate(input: -1) // false
///
/// let rule2 = ComparisonValidationRule(lessThanOrEqual: 100, error: "Must be <= 100")
/// rule2.validate(input: 100) // true
/// rule2.validate(input: 150) // false
/// ```
public struct ComparisonValidationRule<T: Comparable>: IValidationRule {
// MARK: - Types
public typealias Input = T
/// Supported comparison operators.
public enum Condition {
case greaterThan(T)
case greaterThanOrEqual(T)
case lessThan(T)
case lessThanOrEqual(T)
}
// MARK: - Properties
/// The comparison condition to evaluate.
public let condition: Condition
/// The validation error returned when validation fails.
public let error: IValidationError
// MARK: - Initialization
/// Creates a comparison-based validation rule.
///
/// - Parameters:
/// - condition: The comparison condition.
/// - error: The validation error returned if validation fails.
public init(condition: Condition, error: IValidationError) {
self.condition = condition
self.error = error
}
/// Convenience initializer for `greaterThan`.
public init(greaterThan value: T, error: IValidationError) {
self.init(condition: .greaterThan(value), error: error)
}
/// Convenience initializer for `greaterThanOrEqual`.
public init(greaterThanOrEqual value: T, error: IValidationError) {
self.init(condition: .greaterThanOrEqual(value), error: error)
}
/// Convenience initializer for `lessThan`.
public init(lessThan value: T, error: IValidationError) {
self.init(condition: .lessThan(value), error: error)
}
/// Convenience initializer for `lessThanOrEqual`.
public init(lessThanOrEqual value: T, error: IValidationError) {
self.init(condition: .lessThanOrEqual(value), error: error)
}
// MARK: - IValidationRule
public func validate(input: T) -> Bool {
switch condition {
case let .greaterThan(value):
input > value
case let .greaterThanOrEqual(value):
input >= value
case let .lessThan(value):
input < value
case let .lessThanOrEqual(value):
input <= value
}
}
}