# `Minga.Extension.Entry`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/extension/entry.ex#L1)

Data structure representing a declared extension in the registry.

Each entry tracks the extension's source (path, git, or hex), its
runtime status, the loaded module, and the config passed to `init/1`.

# `git_opts`

```elixir
@type git_opts() :: %{
  url: String.t(),
  branch: String.t() | nil,
  ref: String.t() | nil
}
```

Git-specific source options.

# `hex_opts`

```elixir
@type hex_opts() :: %{package: String.t(), version: String.t() | nil}
```

Hex-specific source options.

# `source_type`

```elixir
@type source_type() :: :path | :git | :hex
```

How the extension source code is obtained.

# `t`

```elixir
@type t() :: %Minga.Extension.Entry{
  config: keyword(),
  git: git_opts() | nil,
  hex: hex_opts() | nil,
  module: module() | nil,
  path: String.t() | nil,
  pid: pid() | nil,
  source_type: source_type(),
  status: Minga.Extension.extension_status()
}
```

# `from_git`

```elixir
@spec from_git(
  String.t(),
  keyword()
) :: t()
```

Creates a git-sourced entry.

# `from_hex`

```elixir
@spec from_hex(
  String.t(),
  keyword()
) :: t()
```

Creates a hex-sourced entry.

# `from_path`

```elixir
@spec from_path(
  String.t(),
  keyword()
) :: t()
```

Creates a path-sourced entry.

---

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