### 4.7.0 (2026-05-01)

#### Misc

* Added `ErrorKind::FutureCompleted`
* Some internal cleanups

### 4.6.0 (2026-04-27)

#### Features

* Add `durable`/`exclusive` constructors on `QueueDeclareOptions` for better defaults.
* Add `auto_delete`/`passive` helpers on `QueueDeclareOptions` to facilitate using these features.

### 4.5.0 (2026-04-18)

#### Features

* New rustls-platform-verifier feature (new default)

### 4.4.0 (2026-03-29)

#### Misc

* Reworked internal state handling during early connection steps

#### Bug Fixes

* Updated `async-rs` to 0.8.2 to make sure the lapin Internal RPC loop is bound to the right tokio context

### 4.3.0 (2026-03-10)

#### Misc

* Added `ErrorKind::RuntimeShutdownError` and reworked internal detection and handling

### 4.2.1 (2026-03-08)

#### Features

* We now use exponential backoff for retries of AMQP connection too once the TCP connection is established

#### Misc

* Added an example of semi automatic reconnection handling

### 4.2.0 (2026-03-07)

#### Bug Fixes

* Fixes an issue preventing us from preoperly reconnecting during a rabbitmq server restart

### 4.1.1 (2026-03-05)

#### Bug Fixes

* Properly handle errors emitted by tokio when reactor is shutting down

### 4.1.0 (2026-02-27)

#### Breaking changes

* The closure passed to `ConnectionProperties::configure_backoff` now needs to return the `ExponentialBuilder`

#### Bug Fixes

* `ConnectionProperties::configure_backoff` now works properly. It was previously broken due to implicit Copy behaviour.
* We now retry several times (16 as of now) the TCP connection itself by default when recovery is enabled.

### 4.0.3 (2026-02-21)

#### Bug Fixes

* `PublisherConfirms` is now public

### 4.0.2 (2026-02-20)

#### Features

* `ConnectionBuilder` (and `ConnectionProperties`) now implement `Debug`

### 4.0.1 (2026-02-19)

#### Features

* New `ConnectionBuilder` (and `DefaultConnectionBuilder`) types to centralize everything related to connecting.

#### Bug Fixes

* `ConnectionProperties` reimplements `Clone`

### 4.0.0 (2026-02-08)

#### Breaking changes

* Make more use of protocol types in public api (mostly ShortString and LongString)
* Automatic connection recovery is now done through `ConnectionProperties::enable_auto_recover()`
* Automatic connection recovery is no longer feature-gated by the unstable feature (which has been removed)
* Automatic channel recovery is gone. Channels will still be recovered during connection recovery, but not outside of this scenario.

#### Features

* New feature flags to control default runtime (`tokio`, `smol`)
* Removed deprecated `on_error` callback setup. Use `Connection::events_listener` instead.
* Runtime is now configured in the `Connection::connect_with_runtime` method
* `Connection::block` and `Connection:unblock` have been removed (they were actually a protocol violation)
* Replaced `Acker::mock` with `Delivery::mock`
* Changed `Connection::collector` callback to an async fn
* Added an AuthProvider mechanism configurable through `ConnectionProperties` (to support e.g. automatic oauth2 token refresh)

#### Misc

* Switched our async runtimes integration from `executor-trait` and `reactor-trait` to `async-rs`
* Update amq-protocol to 10.0

### 3.7.2 (2025-11-05)

#### Bug Fixes

* Fix defunct `io_loop` threads being kept in a deadlock on (very) early connection failure

### 3.7.1 (2025-10-12)

#### Bug Fixes

* Fix `io_loop` tracing span

### 3.7.0 (2025-09-22)

#### Bug Fixes

* Make sure we don't run the heartbeat loop multiple times after reconnection

### 3.6.0 (2025-09-15)

#### Features

* Allow configuring the backoff for TCP connection more easily

### 3.5.0 (2025-09-13)

#### Features

* Allow configuring exponential backoff for retrying TCP connection (using the backon crate)

### 3.4.0 (2025-09-02)

#### Bug Fixes

* Fix rabbit-cr-demo auth
* Make sure we always recover on connection process errors

### 3.3.0 (2025-08-30)

#### Features

- Add `Connection::events_listener` for listening to internal events

### 3.2.1 (2025-08-19)

#### Misc

* Add `Acker::mock()` to help writing tests in external programs

### 3.2.0 (2025-08-11)

#### Features

* Add hickory-dns feature to use hickory-dns for domain name resolution to avoid spurious network hangs

### 3.1.1 (2025-08-09)

#### Bug Fixes

* Fix hang when rabbitmq server is unavailable when connecting.
* Fix crash in tokio reactor initial usage

### 3.1.0 (2025-07-31)

#### Features

* Add experimental ability to recover on connection failure

#### Misc

* Drop waker-fn dependency

### 3.0.2 (2025-07-25)

#### Bug Fixes

* When the server closes the TCP connection, handle the ongoing frames before erroring out

#### Misc

* Several fixes related to channel automatic reconnection
* Internal preparatory work for upcoming connection recovery

### 3.0.1 (2025-07-22)

#### Features

* `Channel::wait_for_recovery` to wait for automatic reconnection to finish (if we're in the process of reconnecting)

#### Misc

* Several fixes related to channel automatic reconnection
* Internal preparatory work for upcoming connection recovery

### 3.0.0 (2025-06-12)

#### Breaking changes

* `Error` is now `ErrorKind`, wrapped in a new `Error` type (use `Error::kind` to access the previous type)
* no more `Acker::default`
* `Acker::used` is replaced with `Acker::usable`
* Removed the topology API

#### Features

* rustls crypto backend selection through features
* `Error::is_amqp_error`, `Error::is_amqp_soft_error` and `Error::is_amqp_hard_error`
* default runtime is now optional
* experimental feature to recover channel from AMQP soft error (behind unstable feature flag)
- `Acker::poisoned` to check if underlying Channel has been invalidated (reconnection)

#### Misc

* Update to reactor-trait 2
* Update to amq-protocol 8
* Update to nom 8
* Drop parking-lot dependency
* Drop pinky-swear dependency
* Edition 2024

### 2.5.5 (2025-10-12)

#### Bug Fixes

* Fix `io_loop` tracing span

### 2.5.4 (2025-07-22)

#### Features

* Propagate current tracing span into `io_loop` thread

### 2.5.3 (2025-04-05)

#### Bug Fixes

* Fix a panic when reaching the maximum number of channels

### 2.5.2 (2025-04-02)

#### Bug Fixes

* Fix potential deadlock in server protocol error handling

### 2.5.1 (2025-03-08)

#### Bug Fixes

* Fix potential overflow (only in a log message)

### 2.5.0 (2024-07-27)

#### Bug Fixes

* Better handle in flight frames on io loop termination.

### 2.4.0 (2024-07-16)

#### Bug Fixes

* Prevent `basic_publish` hangs in some rare corner case

### 2.3.4 (2024-05-01)

#### Features

* Allow closing Acker and checking if already used

#### Bug Fixes

* Close connection to server in case of missing heartbeat

### 2.3.3 (2024-04-24)

#### Misc

* Dependencies update

### 2.3.2 (2024-04-23)

#### Bug Fixes

* Don't allow trying to close an already closed connection
* Make sure heartbeats are no longer sent after a connection error

### 2.3.1 (2023-07-14)

#### Misc

* Simplify channels cleanup logic on connection close

### 2.3.0 (2023-07-14)

#### Bug Fixes

* Fix an error when finalizing the connection close duz to missing channel 0.
* Properly cleanup heartbeat sending when connection hit an error.

### 2.2.1 (2023-05-19)

#### Bug Fixes

* Don't call the channel error hook when we get closed with a non error code

### 2.2.0 (2023-05-19)

#### Features

* Introduce `Channel::on_error`

### 2.1.3 (2023-05-19)

#### Bug Fixes

* Don't propagate the same error twice

### 2.1.2 (2023-05-18)

#### Bug Fixes

* Fix memory leak on connection failure

### 2.1.1 (2022-04-08)

#### Bug Fixes

* Fix potential race condition on connection error

### 2.1.0 (2022-03-23)

#### Bug Fixes

* Fix potential race condition on connection opening

### 2.0.3 (2022-02-25)

#### Misc

* Update amq-protocol

### 2.0.2 (2022-02-23)

#### Bug Fixes

* Fix some potential hang with rustls

### 2.0.1 (2022-02-08)

#### Misc

* Update README

### 2.0.0 (2022-02-02)

#### Misc

* Make most of the API based on async fns
* Update to amq-protocol 7.0
* Reworked connector
* Dropped third-party reactors/executors integration
* New third-party reactors integration through reactor-trait
* New third-party executors integration through executor-trait
* Misc internal cleanups
* Default reactor to async-io
* Switch from log to tracing
* Make most internals use async rust
* Switch to edition 2021
* Default to rustls for TLS handling
* `basic_publish` no longer takes ownership of the data
* Dropped Clone impl where it didn't make sense
* Acker is now public

### 1.10.0 (2022-01-30)

#### Bug Fixes

* Fix potential panic on shutdown

### 1.9.0 (2021-11-23)

#### Bug Fixes

* Fix handling of RabbitMQ replies when they arrive unordered

### 1.8.1 (2021-11-12)

#### Misc

* Logging updates

### 1.8.0 (2021-08-22)

#### Misc

* Update to nom 7

### 1.7.1 (2021-05-06)

#### Bug Fixes

* Fix handling of unresponsive servers

### 1.7.0 (2021-04-16)

#### Bug Fixes

* Fix handling of soft errors

### 1.6.9 (2021-04-08)

#### Bug Fixes

* Fix hang in Acker when acking twice (which is invalid)

### 1.6.8 (2021-02-18)

#### Misc

* Simplify acknowledgements internal handling
* Logging updates

### 1.6.7 (2021-02-17)

#### Misc

* Logging updates

### 1.6.6 (2020-12-25)

#### Bug Fixes

* Fix an issue with automatic connection close on drop

### 1.6.5 (2020-12-23)

#### Bug Fixes

* Treat close and error as success for consumers cancel as it forcibly implies cancelation

### 1.6.4 (2020-12-23)

#### Bug Fixes

* Cleanup basic cancel handling
* Fix undocumented rabbitmq behaviour on channel close with expected replies

### 1.6.3 (2020-12-23)

#### Bug Fixes

* Better handling of automatic consumer cancelation when connection is closing

### 1.6.2 (2020-12-23)

#### Bug Fixes

* Fix a potential race condition when automatically canceling consumer on drop

### 1.6.1 (2020-11-28)

#### Bug Fixes

* Flush more often onto socket

### 1.6.0 (2020-11-21)

#### Features

* Introduce `Connection::topology` to get a serializable representation of the declared queues and consumers
* Introduce `Connection::restore` to redeclare the things listed in a Topology
* Introduce `Delivery::acker` as a simpler way to ack/nack/reject deliveries
* `Delivery` can be dereferenced as `Acker` to directly be able to ack/nack/reject
* `BasicGetMessage` and `BasicReturnMessage` can be dereferenced as `Delivery`

### 1.5.0 (2020-10-31)

#### Misc

* Update to amq-protocol 6.0.1

### 1.4.3 (2020-10-26)

#### Misc

* Port examples to async-global-executor

### 1.4.2 (2020-10-16)

#### Misc

* Update dependencies

### 1.4.1 (2020-10-06)

#### Bug Fixes

* When converting Consumer to an Iterator, don't cancel it until the Iterator is gone

### 1.4.0 (2020-10-04)

#### Bug Fixes

* When dropping a Consumer, cancel it if it has no delegates

### 1.3.1 (2020-10-04)

#### Bug Fixes

* Fix potential leak due to consumer clone

### 1.3.0 (2020-10-04)

#### Bug Fixes

* When dropping a Channel, wait for all its consumers to be canceled before closing it

#### Misc

* Use proper `non_exhaustive` annotation for error enum

### 1.2.8 (2020-09-25)

#### Misc

* Update async-task

### 1.2.7 (2020-09-18)

#### Bug Fixes

* Make frame ordering more robust

### 1.2.6 (2020-09-18)

#### Bug Fixes

* Fix a bug in the frame ordering when doing lots of publishing

### 1.2.5 (2020-09-18)

#### Misc

* Update pinky-swear

### 1.2.4 (2020-09-17)

#### Bug Fixes

* Fix a memory leak in publishers confirm

### 1.2.3 (2020-09-02)

#### Bug Fixes

* Fix an issue when redeclaring a queue

### 1.2.2 (2020-08-21)

#### Misc

* Improve logging on connection error

### 1.2.1 (2020-06-26)

#### Features

* Introduce bastion-amqp to use the bastion executor instead of the default one

#### Bug Fixes

* Properly wait for plain stream to be connected on windows

### 1.2.0 (2020-06-25)

#### Misc

* Update amq-protocol

### 1.1.3 (2020-06-23)

#### Misc

* Update dependencies

### 1.1.2 (2020-06-18)

#### Features

* Add `BasicReturnMessage::error`

### 1.1.1 (2020-06-17)

#### Bug Fixes

* Properly handle recycling channels ids when we reached the channel limit
* Fix receiving returned messages from the AMQP server

### 1.1.0 (2020-06-09)

#### Features

* Make codegen optional

### 1.0.2 (2020-06-04)

#### Bug Fixes

* update amq-protocol

### 1.0.1 (2020-06-02)

#### Bug Fixes

* `DefaultExecutor` cleanups

### 1.0.0 (2020-05-27)

#### Features

* Introduce tokio-amqp to use the tokio executor instead of the default one
* Introduce async-amqp to use the async-std executor instead of the default one
* Introduce lapinou to use the smol executor instead of the default one
* New default Reactor
* Reactor is now configurable
* Using self-signed certificates is now easie with `connect_with_config`
* `Channel` gets closed once the last reference is dropped
* `Connection` gets closed once the last reference and the last `Channel` are dropped
* `Consumer::tag` gives you access to the consumer's tag

#### Breaking changes

* The auth mechanism is now configured using a query parameter in the AMQPUri
* The executor trait is now made to handle futures. (e.g. `Box::pin(async move {})`)
* ConsumerDelegate is now built with futures.
* The number of threads used by the default executor is now configured using `ConnectionProperties::with_default_executor`
* `Connection` no longer implements `Clone`
* `Connection::connect` has been reworked to properly handle mid handshake TLS streams
* `CloseOnDrop` is now gone
* `DeliveryResult` now also carries the corresponding `Channel`

#### Bug Fixes

* Follow the specifications in being stricter about receiving invalid frames
* Don't consider interrupted IO signals as failures
* Threads are correctly cleaned up

#### Misc

* Better Debug implementations
* Internals cleanup
* Use vectored io when applicable

### 0.39.7 (2020-04-17)

#### Bug Fixes

* Error handling fixes

### 0.39.6 (2020-04-17)

#### Bug Fixes

* IoLoop error handling fixes

### 0.39.5 (2020-04-17)

#### Bug Fixes

* Fix a hang with rustls flush

### 0.39.4 (2020-04-17)

#### Bug Fixes

* Fix some edge cases issues with the internal buffer

### 0.39.3 (2020-04-17)

#### Bug Fixes

* Fix some issues with openssl
* Flush socket for rustls

### 0.39.2 (2020-04-16)

#### Bug Fixes

* Work around a bug in mio where we sometimes wouldn't receive a readable notification for the socket

### 0.39.1 (2020-04-14)

#### Bug Fixes

* Fix overflow with high heartbeats
* Properly report connection errors

### 0.39.0 (2020-04-08)

#### Breaking changes

* `Connection::on_error` and `Consumer::set_delegate` no longer require a `Box`
* `Connection::on_error` now accept a `FnMut`
* Update to pinky-swear 4.0.0

### 0.38.4 (2020-04-07)

#### Bug Fixes

* Don't queue extraneous heartbeats if we cannot write to socket

### 0.38.4 (2020-04-07)

#### Bug Fixes

* Refuse invalid incoming frames
* Don't send heartbeats unless necessary

#### Misc

* Drop the heartbeat thread

### 0.38.3 (2020-04-06)

#### Bug Fixes

* Fix the way we schedule heartbeats to be sent

### 0.38.2 (2020-04-06)

#### Bug Fixes

* Properly put the Conneciton in Error state when we get closed with protocol error

### 0.38.1 (2020-04-06)

#### Bug Fixes

* Don't panic when CloseOnDrop tries to close an already closed Connection

#### Misc

* Use vectored IO when appropriate when writing to socket

### 0.38.0 (2020-04-05)

#### Bug Fixes

* Wait until a frame has been fully sent before notifying sender
* Properly handle Basic.Return when channel is not in confirm mode
* Fix handling of publisher-confirms ack with returned message
* Fix handling of publisher-confirms nack without returned message

#### Breaking changes

* `Confirmation::Nack` now carries an `Option<Box<BasicReturnMessage>>`
* `Confirmation::Ack` now carries an `Option<Box<BasicReturnMessage>>`

### 0.37.1 (2020-04-04)

#### Bug Fixes

* Prevent a issue when hitting EWOULDBLOCK mid-frame with no other frame queued

### 0.37.0 (2020-04-03)

#### Features

* `Connection` and `Channel` can be moved out of `CloseOnDrop` using `into_inner()`
* We now add a marker to promises when trace logging is enabled to make debugging easier

#### Breaking changes

* Update to pinky-swear 3.0.0 (properly handle chaining result promises)
* `Confirmation` can no longer hold an error
* `PublisherConfirm` now returns a proper `Result<Confirmation>`
* Connecting now returns a `CloseOnDrop<Connection>`
* Creating a channel now returns a `CloseOnDrop<Channel>`
* `PinkySwear` is now hidden from the public API

### 0.36.2 (2020-04-02)

#### Features

* Add a new CloseOnDrop wrapper for automatically closing Connection or Channel when dropped.

#### Bug Fixes

* Properly send errors to publisher confirms awaiters on channel close

### 0.36.1 (2020-04-02)

#### Bug Fixes

* Properly forward errors to publisher confirms awaiters

### 0.36.0 (2020-04-02)

#### Bug Fixes

* Track the frame-sending promise before the response one for syncrhonous methods

#### Breaking changes

* The bugfix induces some changes in the return values of some method. Shouldn't change anything.

### 0.35.2 (2020-04-02)

#### Bug Fixes

* Properly report error in one internal place

### 0.35.1 (2020-04-02)

#### Bug Fixes

* Update pinky-swear to 2.1.0 to avoid any sync op on main thread

### 0.35.0 (2020-04-01)

#### Breaking changes

* Update to pinky-swear 2.0.0 (shoudln't change much)
* Publisher Confirms integration has been reworked:
  * `basic_publish` now gives you a `PinkySwear<Result<PublisherConfirm>>`
  * If you didn't enable publisher confirms using `confirm_select`, you can ignore it
  * If you drop the `PublisherConfirm` it will behave as before and you'll need to call `wait_for_confirms`
  * You can use the ` PublisherConfirm` to wait for this particular `Confirmation` (`Ack`/`Nack(BasicReturnMEssage)`)

#### Bug Fixes

* Detect errors in some edge scenarii

### 0.34.1 (2020-04-01)

#### Bug Fixes

* Fix a bug when receiving basic-return before basic-nack

### 0.34.0 (2020-03-24)

#### Breaking changes

* The `Connect` trait has been simplified
* The `futures` feature doesn't exist anymore (always enabled)
* The `lapin-futures` (0.1 futures compat) has been dropped

#### Misc

* Examples ported to async/await

### 0.33.2 (2020-03-23)

#### Bug Fixes

* Fix nom dependency

### 0.33.1 (2020-03-18)

#### Bug Fixes

* Fix hang on macos

### 0.33.0 (2020-03-12)

#### Breaking changes

* Some more Error reworks
* Port to amq-protocol 5.0 and mio 0.7
* Deprecate lapin-futures

### 0.32.5 (2020-03-09)

#### Bug Fixes

* Prevent lapin-futures from eating memory when eagerly polled

### 0.32.4 (2020-03-09)

#### Bug Fixes

* Followup to 0.32.3 for consumers in lapin-futures

### 0.32.3 (2020-03-09)

#### Bug Fixes

* Fix waking up context when a future gets sent to another one

### 0.32.2 (2020-03-05)

#### Bug Fixes

* Fix race condition in `Channel::close`

### 0.32.1 (2020-03-03)

#### Bug Fixes

* Fix Channel and Connection status in some cases

### 0.32.0 (2020-02-27)

#### Bug Fixes

* Properly handle critical error when reading from socket on first connection

#### Breaking changes

* `Error::ConnectionRefused` is replaced by the proper underlying ProtocolError or IOError

#### Features

* `DefaultExecutor::default()` is now public

### 0.31.0 (2020-02-25)

#### Bug Fixes

* Receiving consumer or basic get deliveries on queue we didn't declare now works properly

#### Breaking changes

* `Channel::basic_consume` now takes an `&str` instead of a `&Queue` as its first parameter

#### Features

* `impl From<_> for AMQPValue`

### 0.30.1 (2020-02-25)

#### Features

* New rustls-native-certs feature

### 0.30.0 (2020-02-25)

#### Breaking changes

* Error enum has been cleaned up
* ErrorHandler now takes the Error as a param

#### Bug Fixes

* Better error handling and forwarding

### 0.29.2 (2020-02-25)

#### Bug Fixes

* Fix PartialEq for Error

### 0.29.1 (2020-02-24)

#### Bug Fixes

* Ensure we properly write everything when we need to split contents

### 0.29.0 (2020-02-24)

#### Breaking changes

* Switch the return types to `pinky-swear` (the API remains mostly the same)

#### Features

* Error is now Clonable

#### Bug Fixes

* Better error handling and bubbling in lots of cases
* Properly handle soft errors

### 0.28.4 (2019-12-03)

#### Bug Fixes

* Fix some error handling in consumers

### 0.28.3 (2019-11-21)

#### Features

* Export ConsumerIterator

### 0.28.2 (2019-11-07)

#### Features

* Update dependencies

### 0.28.1 (20191023)

#### Bug Fixes

* Fix some race conditions in the publisher confirms implementation

### 0.28.0 (20190927)

#### Breaking changes

* `Channel::exchange_declare` now takes an `ExchangeKind` parameter instead of an `&str`

### 0.27.2 (2019-11-07)

#### Features

* Update dependencies

### 0.27.1 (2019-09-26)

#### Bug Fixes

* Warn on unused `Confirmation`
* Avoid Mutex around consumer delegate to enable proper multithreading

### 0.27.0 (2019-09-25)

#### Breaking changes

* Updated amq-protocol to 3.0.0
* `Channel::connection_[,un}blocked` is now `Connection::{,un}block`
* `failure` as been replaced with `std::error::Error` usage
* `Confirmation::as_error` has been removed
* Consumers API has been cleaned up, everything is now a `DeliveryResult`
* `IoLoop::run` is now `IoLoop::start`

#### Features

* Add support for `update_secret` for oauth2 authentication module
* Add support for TLS "identity" (client certificate)
* Consumer can now be used as an `Iterator<Item = Delivery>`
* `Consumer::set_delegate` now accepts a closure parameter
* Add `lapin::Result`

### 0.26.11 (2019-09-17)

#### Bug Fixes

* Update amq-protocol to fix amqps handling

### 0.26.10 (2019-09-11)

#### Bug Fixes

* Fix error handling during early connection stage
* Properly forward errors to consumer delegates

### 0.26.9 (2019-08-26)

#### Bug Fixes

* `IoLoop` fixes under heavy loads

### 0.26.8 (2019-08-26)

#### Bug Fixes

* `IoLoop` fixes under heavy loads

### 0.26.7 (2019-08-23)

#### Bug Fixes

* Make `Connection::connector` and `IoLoop:run` public

### 0.26.6 (2019-08-15)

#### Bug Fixes

* Better handle multiple channel publishing under heavy load

### 0.26.5 (2019-08-14)

#### Bug Fixes

* Fix retrying of `basic_publish` frames

### 0.26.4 (2019-08-14)

#### Bug Fixes

* Rework how `basic_publish` is handled internally to ensure concurrent usages work as expected

### 0.26.3 (2019-08-12)

#### Bug Fixes

* Do not hang on tasks that require an answer in case of channel error

### 0.26.2 (2019-08-12)

#### Bug Fixes

* Fixes some frames ordering when using concurrent `basic_publish` under heavy load

### 0.26.1 (2019-08-09)

#### Bug Fixes

* Properly broadcast channel error to all pending tasks/futures

### 0.26.0 (2019-08-08)

#### Bug Fixes

* Fix unblocking connection
* Properly broadcast connection error to all pending tasks/futures

#### Breaking changes

* Unused IoLoopError has been dropped

### 0.25.0 (2019-07-12)

#### Bug Fixes

* Consumer streams now properly forward connection errors

#### Breaking changes

* lapin's consumer stream now returns a Result

#### Features

* `ConsumerDelegate` now has a `on_error` hook

### 0.24.1 (2019-07-11)

#### Bug Fixes

* Properly handle network disconnections on OSX

### 0.24.0 (2019-07-04)

#### Bug Fixes

* `Connection::close` no longer hangs
* `ConsumerDelegate` no longer requires `fmt::Debug`

#### Breaking changes

* `ConsumerDelegate` methods have been renamed for clarity and only `on_new_delivery` is now mandatory

### 0.23.0 (2019-06-21)

#### Breaking changes

* `lapin-async` as been renamed to `lapin`
* lapin: Instead of passing a `Box<dyn ConsumerSubscriber>` as a parameter to `basic_consume`, you must now call
  `set_delegate(Box<dyn ConsumerDelegate>)` on the returned `Consumer`

#### Features

* `lapin` has experimental support for `futures-0.3` + `std::future::Future` through its `futures` feature

### 0.22.0 (2019-06-20)

#### Features

* you can now select the TLS implementation used for amqps or disable amqps support

#### Bug Fixes

* vhosts are properly handled again
* we now properly wait for the return message when last ack is a nack for publishers confirm

#### Breaking changes

* `wait_for_confirms()` is now async (needs to be awaited)

### 0.21.3 (2019-06-18)

#### Bug Fixes

* More work around connection failures, properly report those as errors
* Add a way to register a connection error handler

### 0.21.2 (2019-06-17)

#### Bug Fixes

* Properly handle connection failures

### 0.21.1 (2019-06-16)

#### Features

* **async**
  * `Connection::run` to keep the program running when there is nothing left to downgraded but consume new messages

#### Bug Fixes

* `io_loop` correctly exists once connection is no longer connected

### 0.21.0 (2019-06-14)

#### Breaking changes

* Some internal methods are no longer public (channel and connection handling)
* Rework how we close channels and connection

### 0.20.0 (2019-06-14)

#### Breaking changes

* Drop duplicate Credentials param from connect, use the credentials from the AMQPUri.

### 0.19.0 (2019-06-14)

#### Features

* All of AMQP methods and auth mechanisms are now supported

#### Bug Fixes

* Better consumers handling
* Misc code cleanup and modernization
* AMQP is now fully supported, no more crahs on unexpected frames

#### Breaking changes

* Method options are now generated. Hardcoded fields from AMQP omitted. Options are shared between async and futures
* The way we handle `publisher_confirm` has changed. You now need to call `confirm_select` explicitly, and then
  `wait_for_confirms` to wait for all pending confirmations
* **async**
  * Methods are now on the `Channel` object which is now returned instead of `channel_id` by `create_channel`
  * Methods are now generated from protocol specifications
  * Methods return a Confirmation that can be awaited
  * ShortString and LongString are now concrete types (!= String), which can be created from &str or String using `into()`
  * Connection::connect has been rewritten
* **futures**
  * Port to the new lapin-async
  * Client::connect has been rewritten

### 0.18.0 (2019-03-03)

#### Bug Fixes

* Better `delivery_tag` handling
* Adapt our behaviour wrt ack/nack to be specifications-compliant
* We now pass several additional information to the server when connecting, such as capabilities

#### Breaking changes

* Connect now takes an additional `ConnectionProperties` for better configuration

#### Features

* Better logging when channel gets closed by server
* Support receiving BasicCancel from the server

### 0.17.0 (2019-02-15)

#### Bug Fixes

* Drop prefetched messages when specific arguments are passed to `basic_{,n}ack` or `basic_cancel`

#### Housekeeping

* Drop sasl dependency, avoiding linkage to LGPL-3 licensed code

### 0.16.0 (2019-02-01)

#### Housekeeping

* Switch to edition 2018
* Switch to `parking_lot` Mutex

#### Breaking changes

* **futures**
  * Drop now unused mutex poisoning error

### 0.15.0 (2018-12-05)

#### Housekeeping

* Update `amq-protocol`

#### Breaking Changes

* **async:**
  * Introduce a new `Error` type, replacing occurrences of `io::Error` in public APIs ([#145](https://github.com/amqp-rs/lapin/pull/147))
* **futures:**
  * Introduce a new `Error` type, replacing occurrences of `io::Error` in public APIs ([#145](https://github.com/amqp-rs/lapin/pull/145))

### 0.14.1 (2018-11-16)

#### Housekeeping

* Update `env_logger`
* Drop unused `build.rs` from async

#### Bug Fixes

* Fix heartbeat interval

### 0.14.0 (2018-10-17)

#### Housekeeping

* Update amq-protocol dependency
* Reexport `amq_protocol::uri`

### 0.13.0 (2018-07-09)

#### Features

* **futures:**
  * `basic_ack` and `basic_nack` API now support passing the `multiple` flag
  * Port to the new `tokio-codec` crate
  * The object returned by `queue_declare` now holds the messages count and the consumers count too

#### Bug Fixes

* Fully rework how consumers are handled internally, should be way more robust now
* Heartbeats are now preemptive and are successfully sent even under heavy load

#### Breaking Changes

* Port to `nom` 4
* **async:** some fields got their visibility downgraded to private as part of the consumers rework
* **futures:**
  * We now use `impl trait` and thus require rust 1.26.0 or greater
  * `basic_publish` payload is now a `Vec<u8>`

### 0.12.0 (2018-06-05)

#### Features

* Implement `channel_close_ok`
* Slightly rework consumers internal handling
* **futures:**
  * Allow cancelling the Heartbeat future
  * Implement flow methods

#### Bug Fixes

* Fix bad expectation for empty payloads
* Fix heartbeat when configured value is 0
* Fix channel overflow when `channel_max` is low
* **futures:**
  * Ensure tasks aren't dropped when we hit `Async::NotReady` but queued for re-poll instead
  * Correctly handle mutex poisoning
  * Use generated consumer tag and queue name when an empty one is provided
  * Fix `Sink` implementation on `AMQPTransport`

#### Breaking Changes

* **futures:**
  * Port to `tokio`
  * Update to `tokio-timer` 0.2
  * `queue_declare` now return a `Queue` object
  * `basic_consume` now expects a `Queue` object to ensure you've called `queue_declare first`

### 0.11.1 (2018-04-12)

#### Bug Fixes

* **futures:** Get back to `tokio-timer` 0.1

### 0.11.0 (2018-04-08)

#### Features

* implement `basic_qos`
* **futures:**
  * Implement `basic_nack`
  * Implement `queue_unbind`
  * Mark all futures as `Send` to ease `tokio` integration

#### Bug Fixes

* **futures:** Get back to `tokio-timer` 0.1

#### Breaking Changes

* `Message` is now `Delivery`, differentiate from `BasicGetMessage`
* **futures:**
  * Port to `tokio-timer` 0.2
  * Prefer `handle.spawn` to `thread::new` for the heartbeat

### 0.10.0 (2017-07-13)

#### Bug Fixes

* Rework how the futures API is handled internally
* Rework client-server parameters negotiation at connection

#### Breaking Changes

* **futures:**
  * `create_confirm_channel` now take a `ConfirmSelectOptions`
  * Run heartbeat in a separated thread (delegate thread creation to user)
  * Return a heartbeat creation closure alongside the client

### 0.9.0 (2017-06-19)

#### Features

* Implement `access` methods
* **async:**
  * Make errors more specific
  * Do the `frame_max` negotiation with the server
* **futures:**
  * Implement missing exchange methods

#### Breaking Changes

* **futures:** Rework the `basic_publish` API

### 0.8.2 (2017-05-04)

#### Bug Fixes

* Update `amq-protocol`

### 0.8.1 (2017-05-04)

#### Bug Fixes

* Better error handling

### 0.8.0 (2017-04-13)

#### Features

* **futures:** Implement `Channel::close`

#### Bug Fixes

* Polling improvements
- Better error handling

### 0.7.0 (2017-04-10)

#### Features

* Implement `exchange_declare`
* **futures:**
  * Implement `queue_bind`
  * Implement `queue_delete`

### 0.6.0 (2017-03-30)

#### Features

* Allow choosing the vhost

### 0.5.0 (2017-03-28)

#### Bug Fixes

* Update `sasl` to 0.4 (removes the `openssl` dependency)

### 0.4.0 (2017-03-28)

#### Features

* Implement `confirm_select`
* **async:**
  * Add support for BasicProperties
  * Implement `receive_basic_ack`
  * Implement `receive_basic_nack`
* **futures:**
  * Implement confirm channel
  * Implement heartbeat

### 0.3.0 (2017-03-25)

#### Features

* Chunking of message bodies

#### Breaking Changes

* **futures:** Add options for API methods missing them

### 0.2.0 (2017-03-20)

#### Features

* Initial release

