# `Rivet.Migration.Manage`
[🔗](https://github.com/srevenant/rivet/blob/main/lib/rivet/migration/manage.ex#L1)

# `rivet_config`

```elixir
@type rivet_config() :: %{
  app: String.t(),
  base: atom(),
  base_path: String.t(),
  models_root: String.t(),
  opts: Keyword.t(),
  tests_root: String.t()
}
```

# `rivet_error`

```elixir
@type rivet_error() :: {:error, String.t() | atom()}
```

# `rivet_migration_input_any`

```elixir
@type rivet_migration_input_any() ::
  rivet_migration_input_include()
  | rivet_migration_input_external()
  | rivet_migration_input_model()
```

# `rivet_migration_input_external`

```elixir
@type rivet_migration_input_external() :: %{
  external: String.t(),
  migrations: [rivet_migration_input_include()]
}
```

# `rivet_migration_input_include`

```elixir
@type rivet_migration_input_include() :: %{include: module(), prefix: integer()}
```

# `rivet_migration_input_model`

```elixir
@type rivet_migration_input_model() :: map()
```

# `rivet_migration_state`

```elixir
@type rivet_migration_state() :: %{
  idx: %{required(integer()) =&gt; Rivet.Migration.t()},
  mods: %{required(atom()) =&gt; list()}
}
```

# `rivet_migrations`

```elixir
@type rivet_migrations() :: [Rivet.Migration.t()]
```

# `rivet_state_result`

```elixir
@type rivet_state_result() :: {:ok, rivet_migration_state()} | rivet_error()
```

# `add_include`

# `add_migration`

# `module_parts`

iex> cfg = %{app: :rivet_email, base: "Rivet.Email", base_path: "../rivet_email", models_root: "../rivet_email/lib/email", opts: [base_dir: "../rivet_email"], tests_root: "../rivet_email/test/email"}
iex> ver = 2000
iex> module_parts("Template", "doctest", ver, cfg)
%{base: "Doctest", name: %{migration: Rivet.Email.Template.Migrations.Doctest, model: "Rivet.Email.Template"}, path: %{migration: "priv/rivet/migrations/template/doctest.exs", migrations: "priv/rivet/migrations/template", model: "../rivet_email/lib/email/template"}, ver: 2000}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
