# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.4.0](https://github.com/TrueLayer/retry-policies/compare/v0.3.0...v0.4.0) - 2024-05-10

### Changed

- [Breaking] Replace `chrono` with standard library types
  - Replace `chrono::DateTime<Utc>` with `std::time::SystemTime`

### Removed

- Remove unused `anyhow` dependency
- Remove `fake` dependency

## [0.3.0] - 2024-03-04
- [Breaking] Implement `RetryPolicy` for `ExponentialBackoffTimed`, which requires a modification to the `should_retry` method of 
    `RetryPolicy` in order to pass the time at which the task (original request) was started.

## [0.2.1] - 2023-10-09

### Added

- Total duration algorithm can now be configured to also consider max retries, calculated applying no jitter (1.0)
  - We enforce whatever comes first, total duration or max retries
- Exponential base is now configurable

## [0.2.0] - 2023-07-21

### Changed

- [Breaking] Change backoff and jitter algorithms
  - Change the backoff algorithm to a more conventional exponential backoff.
  - Replace the decorrelated jitter algorithm with an option of either none, full, or bounded. Defaults to full jitter.
- [Breaking] Remove `ExponentialBackoffBuilder::backoff_exponent()`
  - The number of attempts is now used as the exponent.
- [Breaking] Require a task start time when using a total retry duration
  - `ExponentialBackoffBuilder::build_with_total_retry_duration()` now returns `ExponentialBackoffTimed` which does not implement `RetryPolicy`.
- [Breaking] Mark `ExponentialBackoff` as `non_exhaustive`
  - Can no longer be constructed directly.

## [0.1.2] - 2022-10-28

### Added

- `Debug` derived for `RetryDecision`

## [0.1.1] - 2021-10-18

### Security

- remove time v0.1 dependency

## [0.1.0] - 2021-08-11

### Added

- `ExponentialBackoff` policy.
