Reflection in Elixir

Ecto has some reflection with

__schema__

For example…

iex> Accounts.User.__schema__ :fields
[:id, :name, :email, :password_hash, :is_admin, :customer_info, :inserted_at,
 :updated_at]
iex> Accounts.User.__schema__ :type, :id
:id
iex> Accounts.User.__schema__ :type, :name
:string
iex> Accounts.User.__schema__ :associations
[]

The list is not complete…

        def __schema__(:prefix)
        def __schema__(:source)
        def __schema__(:fields)
        def __schema__(:query_fields)
        def __schema__(:primary_key)
        def __schema__(:hash)
        def __schema__(:read_after_writes)
        def __schema__(:autogenerate_id)
        def __schema__(:autogenerate)
        def __schema__(:autoupdate)
        ...

This works for Ecto schema, but not for struct :slight_smile: