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

Public helpers for lowering Elixir typespec forms into RustQ type metadata.

`RustQ.Spec` accepts both ordinary quoted typespec AST and Erlang/BEAM
abstract typespec forms returned by the standard library Code.Typespec fetch
helpers.

# `aliases`

```elixir
@spec aliases([term()]) :: map()
```

Builds type aliases from quoted or BEAM abstract type declarations.

# `declarations`

```elixir
@spec declarations(Macro.t()) :: %{
  aliases: %{optional({atom(), non_neg_integer()}) =&gt; RustQ.Meta.Type.t()},
  specs: [{atom(), [Macro.t()]}],
  defs: %{optional(atom()) =&gt; [atom()]}
}
```

Extracts aliases, function specs, and argument names from quoted module AST.

# `declarations_file!`

```elixir
@spec declarations_file!(Path.t()) :: %{
  aliases: %{optional({atom(), non_neg_integer()}) =&gt; RustQ.Meta.Type.t()},
  specs: [{atom(), [Macro.t()]}],
  defs: %{optional(atom()) =&gt; [atom()]}
}
```

Extracts aliases, function specs, and argument names from an Elixir source file.

# `from_syn`

```elixir
@spec from_syn(RustQ.Syn.type()) :: RustQ.Meta.Type.t()
```

Converts structured `RustQ.Syn.Type` metadata into `RustQ.Meta.Type` metadata.

# `normalize`

```elixir
@spec normalize(term()) :: Macro.t()
```

Normalizes a quoted or BEAM abstract typespec form to quoted AST.

# `type`

```elixir
@spec type(term(), map()) :: RustQ.Meta.Type.t()
```

Lowers a typespec type form to `RustQ.Meta.Type` metadata.

---

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