Yes, on both accounts. I can’t share the code (it’s owned by the clients), but the basic take is something like
def normalize(data, types) do
{%{}, types}
|> Ecto.Changeset.cast(data, Map.keys(types))
|> Ecto.Changeset.apply_action(:insert)
end
This is probably not enough (e.g. you may want to handle nils and missing keys), but it’s a solid start.






















