Vapor v4.32.0 Release Notes
Release Date: 2020-10-07 // over 3 years ago-
🚀 ###### This patch was authored and released by @tanner0101.
➕ Adds support for validating nested arrays (#2473, #2238, fixes #2158).
Assuming the following
User
definition:struct User: Codable { struct Hobby: Codable { var title: String } var hobbies: [Hobby] }
Validations for
User
and its nested array of hobbies can be defined like so:extension User: Validatable { static func validations(\_ validations: inout Validations) { validations.add(each: "hobbies") { i, hobby in hobby.add("title", as: String.self, is: .characterSet(.alphanumerics + .whitespaces)) } } }
Note that the closure receives the items index
i
. This can be used to dynamically adjust validations depending on index:validations.add(each: "hobbies") { i, hobby in// Don't validate first item.if i != 0 { hobby.add("title", as: String.self, is: .characterSet(.alphanumerics + .whitespaces)) } }
Also note how this method complements
Validations.add(_:)
(without the each parameter) for validating nested dictionaries:struct User: Codable, Validatable { struct Hobby: Codable { var title: String } var hobby: Hobby static func validations(\_ validations: inout Validations) { validations.add("hobbies") { hobby in hobby.add("title", as: String.self, is: .characterSet(.alphanumerics + .whitespaces)) } } }