Julia field-level input validation collector

Julia
function validate(input, rules)
    errors = Dict{String,String}()
    for (field, checks) in rules
        value = get(input, field, missing)
        for (pred, message) in checks
            pred(value) && continue
            errors[field] = message
            break
        end
    end
    return errors
end

rules = Dict(
    "name" => [(v -> v isa AbstractString && !isempty(strip(v)), "name is required")],
    "age"  => [(v -> v isa Integer, "age must be an integer"), (v -> 0 <= v <= 150, "age must be 0-150")],
)
errs = validate(Dict("name" => " ", "age" => 200), rules)
println(join(["$k: $v" for (k, v) in errs], "; "))