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