# `RustQ.Cargo`
[🔗](https://github.com/dannote/rustq/blob/v0.11.1/lib/rustq/cargo.ex#L1)

Helpers for discovering Rust package metadata through Cargo.

This module wraps `cargo metadata` so generators can find source roots for
registry, git, and path dependencies without assuming Cargo's on-disk cache
layout.

# `clear_cached_metadata`

```elixir
@spec clear_cached_metadata(keyword()) :: :ok
```

Clears cached Cargo metadata for a manifest.

# `metadata!`

```elixir
@spec metadata!(keyword()) :: RustQ.Cargo.Metadata.t()
```

Returns decoded `cargo metadata` for a manifest.

Options:

  * `:manifest_path` - path to `Cargo.toml`. Defaults to `"Cargo.toml"`.

# `package!`

```elixir
@spec package!(
  String.t(),
  keyword()
) :: RustQ.Cargo.Package.t()
```

Returns package metadata by name.

Raises if the package is not present in `cargo metadata` output.

# `package_source!`

```elixir
@spec package_source!(
  String.t(),
  keyword()
) :: Path.t()
```

Returns the source root for a package by name.

Raises if the package is not present in `cargo metadata` output.

# `package_sources!`

```elixir
@spec package_sources!(keyword()) :: %{required(String.t()) =&gt; Path.t()}
```

Returns all package source roots from Cargo metadata.

The returned map keys are package names and values are source directories
derived from each package's `manifest_path`.

# `source_link`

```elixir
@spec source_link(RustQ.Cargo.Package.t(), Path.t(), pos_integer()) ::
  String.t() | nil
```

Returns a web source link for a package source path and line.

Registry packages currently link to docs.rs source pages. Path packages or
paths outside the package root return `nil`.

# `source_link`

```elixir
@spec source_link(String.t(), Path.t(), pos_integer(), keyword()) :: String.t() | nil
```

Returns a web source link for a package by name, path, and line.

---

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