# `Astral.Route.Pattern`
[🔗](https://github.com/elixir-volt/astral/blob/v0.7.0/lib/astral/route/pattern.ex#L1)

Elixir-style route patterns for generated and dynamic Astral routes.

Patterns use Plug/Phoenix-inspired path parameters in Elixir APIs:

    /blog/:slug
    /blog/*page
    /tags/:tag/*page

`:name` captures one path segment. `*name` captures the rest of the path and
must be the last segment. A missing glob is allowed, which makes patterns like
`/blog/*page` useful for pagination where page one lives at `/blog` and later
pages live at `/blog/2`, `/blog/3`, and so on.

# `part`

```elixir
@type part() :: {:static, String.t()} | {:param, String.t()} | {:glob, String.t()}
```

# `t`

```elixir
@type t() :: %Astral.Route.Pattern{parts: [part()], source: String.t()}
```

# `generate`

```elixir
@spec generate(String.t() | t(), map() | keyword()) :: String.t()
```

Generate a concrete route path from a pattern and params.

# `match`

```elixir
@spec match(String.t() | t(), String.t()) ::
  {:ok, %{required(String.t()) =&gt; String.t() | nil}} | :error
```

Match a concrete path against a pattern and return string-keyed captured params.

# `match?`

```elixir
@spec match?(String.t() | t(), String.t()) :: boolean()
```

Return true when a concrete path matches a pattern.

# `normalize_params`

```elixir
@spec normalize_params(map() | keyword()) :: map()
```

Normalize route params to string keys.

# `parse`

```elixir
@spec parse(String.t()) :: t()
```

Parse a route pattern.

---

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