-spec changeset(map(), map()) ->
#kura_changeset{valid :: boolean(),
schema :: module() | undefined,
data :: map(),
params :: map(),
changes :: map(),
errors :: [{atom(), binary()}],
types :: #{atom() => kura_types:kura_type()},
required :: [atom()],
action :: atom() | undefined,
constraints ::
[#kura_constraint{type ::
unique | foreign_key | check | exclusion,
constraint :: binary(),
field :: atom(),
message :: binary()}],
assoc_changes :: #{atom() => #kura_changeset{} | [#kura_changeset{}]},
prepare :: [fun((#kura_changeset{}) -> #kura_changeset{})],
optimistic_lock :: atom() | undefined}.