Field-level input validation error map
Crystal
def validate(input : Hash(String, String)) : Hash(String, String)
errors = {} of String => String
name = input["name"]?.to_s.strip
errors["name"] = "is required" if name.empty?
age_raw = input["age"]?
age = age_raw.try(&.to_i?)
errors["age"] = "must be an integer" if age_raw && age.nil?
errors["age"] = "must be at least 18" if age && age < 18
errors
end
errors = validate({"name" => " ", "age" => "17"})
puts errors