apool

Crates.ioapool
lib.rsapool
version0.1.3
sourcesrc
created_at2021-08-21 19:50:28.125043
updated_at2021-08-22 00:39:11.975738
descriptionAsync generic pool crate for rust
homepagehttps://github.com/post-rex/apool
repositoryhttps://github.com/post-rex/apool
max_upload_size
id440431
size20,047
Florian König (post-rex)

documentation

https://docs.rs/apool

README

apool

This crate allows you to create a Pool of any type T: Send + Sync lazily. When trying to acquire a &mut T

  • if no instances have been created yet a new one will be created,
  • if all instances are in use, a new instance will be created,
  • unless a specified pool maximum is reached the task will wait for a instance to become free again.

T does not need to implement Clone, instead the Pool requites a type S which acts as State, and a dyn Fn(&mut S, &mut PoolTransformer<T>) which can create new instances of T. The Fn will only be called if the maximum has not yet been reached.

Usage

let pool = Pool::<FakeDatabase, &'static str>::new(
    4,
    "fakedb://127.0.0.1:1337/fake_website",
    |state, transformer| {
        let url = *state;
        transformer.spawn(async {
            FakeDatabase::connect(url).await.unwrap()
        });
    },
);

let guard = pool.get().await;
guard.commit_data().await;
Commit count: 9

cargo fmt