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)) } } }