# `Sidereon.GNSS.SP3.ExactRequest`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/gnss/sp3.ex#L54)

Source-independent request used to validate one exact SP3 product.

Construct requests with `new/4` or `from_identity/1`. The opaque core
handle retains identity-derived format-revision and producing-agency
constraints; the remaining fields are exposed for inspection only.

# `t`

```elixir
@type t() :: %Sidereon.GNSS.SP3.ExactRequest{
  date: Date.t(),
  expected_agency: String.t() | nil,
  format_version: String.t() | nil,
  handle: reference(),
  issue: String.t() | nil,
  sample: String.t(),
  span: String.t()
}
```

# `from_identity`

```elixir
@spec from_identity(Sidereon.GNSS.Distribution.ProductIdentity.t()) ::
  {:ok, t()} | {:error, term()}
```

Build an exact request from a complete catalog product identity.

# `new`

```elixir
@spec new(Date.t() | NaiveDateTime.t() | tuple(), String.t(), String.t(), keyword()) ::
  {:ok, t()} | {:error, term()}
```

Build and validate an exact SP3 request.

`opts` accepts `:issue` (`HHMM`) and `:expected_agency` (the one-to-four
character upper-case SP3 producer code).

# `require_agency`

```elixir
@spec require_agency(t(), String.t()) :: {:ok, t()} | {:error, term()}
```

Return a copy requiring a particular SP3 producing-agency code.

---

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