4 releases
0.1.3 | Aug 22, 2021 |
---|---|
0.1.2 | Aug 22, 2021 |
0.1.1 | Aug 21, 2021 |
0.1.0 | Aug 21, 2021 |
#20 in #created
9KB
181 lines
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;
Dependencies
~2–7.5MB
~49K SLoC