# `VirtualTimeGenServer.Packages`
[🔗](https://github.com/d-led/gen_server_virtual_time/blob/v1.0.1/packages/gen_server_virtual_time/lib/virtual_time_gen_server/packages.ex#L1)

Which package of this library family owns a module, and what a project has to
add when the module is missing.

The library is published as several packages that share one version. A module
keeps its name when it changes package, so a project that misses one of them
only has to add a dependency — this table is what lets
`mix virtual_time.doctor` say which one, instead of leaving a bare
`module ActorSimulation is not available` in the build output.

# `package`

```elixir
@type package() :: :actor_simulation | :actor_simulation_codegen
```

# `dependency`

```elixir
@spec dependency(package()) :: String.t()
```

The dependency line a project adds for `package`.

# `owner`

```elixir
@spec owner(String.t()) :: package() | nil
```

The package that owns `module`, or `nil` when the module belongs to this
package or to nothing we know.

A module matches a family entry when it is that entry's module or a module
under it. The most specific entry wins, so `ActorSimulation.CAFGenerator` is
the codegen package's even though `ActorSimulation` is the simulation's.

# `packages`

```elixir
@spec packages() :: [package()]
```

Every package that is published next to this one.

# `removed_api`

```elixir
@spec removed_api(String.t(), String.t() | nil) :: String.t() | nil
```

What to write instead of a call that no longer exists, or `nil` when the call
is fine.

---

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