### 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/CleverCloud/lapin/pull/147))
* **futures:**
* Introduce a new `Error` type, replacing occurrences of `io::Error` in public APIs ([#145](https://github.com/CleverCloud/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