# `Trogon.Commanded.ConsistencyPolicy.ExactVersionPolicy`
[🔗](https://github.com/straw-hat-team/beam-monorepo/blob/trogon_commanded@v1.0.1/apps/trogon_commanded/lib/trogon/commanded/consistency_policy/exact_version_policy.ex#L1)

Consistency policy that returns only if `projection.version == required_version`.
Fails immediately with VersionMismatchError if version has moved past required.

# `milliseconds`

```elixir
@type milliseconds() :: pos_integer()
```

Positive integer milliseconds.

# `opts`

```elixir
@type opts() :: %{
  version: version(),
  timeout: Duration.t() | milliseconds(),
  delay: Duration.t() | milliseconds()
}
```

Options for `new!/1`. Accepts Duration or integer milliseconds for timeout/delay.

# `t`

```elixir
@type t() :: %Trogon.Commanded.ConsistencyPolicy.ExactVersionPolicy{
  delay: milliseconds(),
  timeout: milliseconds(),
  version: version()
}
```

Returns only if projection.version == required version. Fails if version moved past.

# `version`

```elixir
@type version() :: non_neg_integer()
```

Required projection version (event stream position).

# `from_proto`

```elixir
@spec from_proto(TrogonProto.Consistency.V1Alpha1.Consistency.t()) :: t()
```

Build policy from protobuf Consistency with exact_version requirement.

Uses defaults (5s, 100ms) when proto omits durations.

# `new!`

```elixir
@spec new!(opts()) :: t()
```

# `to_proto`

```elixir
@spec to_proto(t()) :: TrogonProto.Consistency.V1Alpha1.Consistency.t()
```

Convert policy to protobuf Consistency.

---

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