defmodule Rivet do
@moduledoc """
***This project is still a "Work in Progress" and not ready for GA***
[Rivets](https://docs.google.com/document/d/1ntoTA9YRE7KvKpmwZRtfzKwTZNgo2CY6YfJnDNQAlBc) is an opinionated framework for managing data models in Elixir.
`Rivet` is a series of helper libraries for elixir applications wanting help in their Rivets projects.
"""
defmacro __using__(_) do
quote do
@type rivet_config :: %{
app: String.t(),
base: atom(),
base_path: String.t(),
models_root: String.t(),
opts: Keyword.t(),
tests_root: String.t()
}
@type rivet_error :: {:error, String.t() | atom()}
@type rivet_migration_state :: %{
idx: %{integer() => Rivet.Migration.t()},
mods: %{atom() => list()}
}
@type rivet_migration_input_include :: %{include: module(), prefix: integer()}
@type rivet_migration_input_external :: %{
external: String.t(),
migrations: list(rivet_migration_input_include())
}
@type rivet_migration_input_model :: map()
# %{
# base: true | false,
# version: integer(),
# module: module()
# }
@type rivet_migration_input_any() ::
rivet_migration_input_include()
| rivet_migration_input_external()
| rivet_migration_input_model()
@type rivet_migrations :: list(Rivet.Migration.t())
@type rivet_state_result() :: {:ok, rivet_migration_state()} | rivet_error()
@migrations_file "migrations.exs"
@index_file "index.exs"
@archive_file "archive.exs"
end
end
end