# `Foundation.Retry.Handler`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L1)

Retry handler state and delay calculations.

# `t`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L23)

```elixir
@type t() :: %Foundation.Retry.Handler{
  attempt: non_neg_integer(),
  base_delay_ms: non_neg_integer(),
  jitter_pct: float(),
  last_progress_at: integer() | nil,
  max_delay_ms: non_neg_integer(),
  max_retries: non_neg_integer() | :infinity,
  progress_timeout_ms: timeout() | nil,
  start_time: integer()
}
```

# `elapsed_ms`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L127)

```elixir
@spec elapsed_ms(t()) :: non_neg_integer()
```

# `from_config`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L88)

```elixir
@spec from_config(struct()) :: t()
```

Build a Handler from a config struct that implements to_handler_opts/1.

# `increment_attempt`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L122)

```elixir
@spec increment_attempt(t()) :: t()
```

# `new`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L35)

```elixir
@spec new(keyword()) :: t()
```

# `next_delay`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L67)

```elixir
@spec next_delay(t()) :: non_neg_integer()
```

# `progress_timeout?`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L109)

```elixir
@spec progress_timeout?(t()) :: boolean()
```

# `record_progress`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L104)

```elixir
@spec record_progress(t()) :: t()
```

# `retry?`
[🔗](https://github.com/nshkrdotcom/foundation/blob/v0.2.1/lib/foundation/retry/handler.ex#L51)

```elixir
@spec retry?(t(), term()) :: boolean()
```

---

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