amqp_return_type(t) :: {:ok, t} | {:error, integer()}
ecto_save() :: {:ok, Ecto.Schema.t()} | {:error, Ecto.Changeset.t()}
ecto_transaction() :: {:ok, any()} | {:error, any()} | {:error, atom(), any(), %{optional(atom()) => any()}}
key(_a)
from_key(key(any())) :: integer()
to_key(integer(), a) :: key(a) when a: atom()
to_key(String.t(), a) :: key(a) when a: atom()