13 releases (8 breaking)

0.12.1 May 4, 2024
0.12.0 Mar 31, 2024
0.11.0 Sep 26, 2023
0.10.0 Feb 23, 2022
0.0.0 Dec 3, 2019

#1026 in Asynchronous

Download history 1618/week @ 2024-10-11 1865/week @ 2024-10-18 2162/week @ 2024-10-25 2203/week @ 2024-11-01 2361/week @ 2024-11-08 1701/week @ 2024-11-15 2002/week @ 2024-11-22 2105/week @ 2024-11-29 1934/week @ 2024-12-06 1406/week @ 2024-12-13 1239/week @ 2024-12-20 926/week @ 2024-12-27 1633/week @ 2025-01-03 2064/week @ 2025-01-10 1870/week @ 2025-01-17 1428/week @ 2025-01-24

7,266 downloads per month
Used in 6 crates

MIT/Apache

86KB
1.5K SLoC

Deadpool for Lapin Latest Version Unsafe forbidden Rust 1.75+

Deadpool is a dead simple async pool for connections and objects of any type.

This crate implements a deadpool manager for lapin.

Features

Feature Description Extra dependencies Default
rt_tokio_1 Enable support for tokio crate deadpool/rt_tokio_1 yes
rt_async-std_1 Enable support for async-std crate deadpool/rt_async-std_1 no
serde Enable support for serde crate deadpool/serde, serde/derive no

Example with tokio-amqp crate

use std::sync::Arc;

use deadpool_lapin::{Config, Manager, Pool, Runtime};
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut cfg = Config::default();
    cfg.url = Some("amqp://127.0.0.1:5672/%2f".into());
    let pool = cfg.create_pool(Some(Runtime::Tokio1))?;
    for _ in 1..10 {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool",
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

Example with config, dotenvy and tokio-amqp crate

use std::sync::Arc;

use deadpool_lapin::Runtime;
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties,
};
use dotenvy::dotenv;

#[derive(Debug, serde::Deserialize)]
struct Config {
    #[serde(default)]
    amqp: deadpool_lapin::Config
}

impl Config {
    pub fn from_env() -> Result<Self, config::ConfigError> {
         config::Config::builder()
            .add_source(config::Environment::default().separator("__"))
            .build()?
            .try_deserialize()
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv().ok();
    let mut cfg = Config::from_env().unwrap();
    let pool = cfg.amqp.create_pool(Some(Runtime::Tokio1)).unwrap();
    for _ in 1..10 {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool",
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

License

Licensed under either of

at your option.

Dependencies

~10–21MB
~315K SLoC