forked from vapor/vapor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Validatable.swift
41 lines (35 loc) 路 1.27 KB
/
Validatable.swift
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
/// Capable of being validated. Conformance adds a throwing `validate()` method.
///
/// struct User: Validatable {
/// var name: String
/// var age: Int
///
/// static func validations() -> [Validation] {
/// [Validation(key: "name", validator: .count(5...) && .alphanumeric)]
/// }
/// }
public protocol Validatable {
static func validations(_ validations: inout Validations)
}
extension Validatable {
public static func validate(content request: Request) throws {
try self.validations().validate(request: request).assert()
}
public static func validate(query request: Request) throws {
try self.validations().validate(query: request.url).assert()
}
public static func validate(json: String) throws {
try self.validations().validate(json: json).assert()
}
public static func validate(query: URI) throws {
try self.validations().validate(query: query).assert()
}
public static func validate(_ decoder: Decoder) throws {
try self.validations().validate(decoder).assert()
}
public static func validations() -> Validations {
var validations = Validations()
self.validations(&validations)
return validations
}
}