deadpool/managed/mod.rs
1//! Managed version of the pool.
2//!
3//! "Managed" means that it requires a [`Manager`] which is responsible for
4//! creating and recycling objects as they are needed.
5//!
6//! # Example
7//!
8//! ```rust
9//! use deadpool::managed;
10//!
11//! #[derive(Debug)]
12//! enum Error { Fail }
13//!
14//! struct Computer {}
15//!
16//! impl Computer {
17//! async fn get_answer(&self) -> i32 {
18//! 42
19//! }
20//! }
21//!
22//! struct Manager {}
23//!
24//! impl managed::Manager for Manager {
25//! type Type = Computer;
26//! type Error = Error;
27//!
28//! async fn create(&self) -> Result<Computer, Error> {
29//! Ok(Computer {})
30//! }
31//! async fn recycle(&self, conn: &mut Computer, _: &managed::Metrics) -> managed::RecycleResult<Error> {
32//! Ok(())
33//! }
34//! }
35//!
36//! type Pool = managed::Pool<Manager>;
37//!
38//! #[tokio::main]
39//! async fn main() {
40//! let mgr = Manager {};
41//! let pool = Pool::builder(mgr).max_size(16).build().unwrap();
42//! let mut conn = pool.get().await.unwrap();
43//! let answer = conn.get_answer().await;
44//! assert_eq!(answer, 42);
45//! }
46//! ```
47//!
48//! For a more complete example please see
49//! [`deadpool-postgres`](https://crates.io/crates/deadpool-postgres) crate.
50
51mod builder;
52mod config;
53mod dropguard;
54mod errors;
55mod hooks;
56mod manager;
57mod metrics;
58mod object;
59mod pool;
60pub mod reexports;
61
62pub use crate::Status;
63
64pub use self::{
65 builder::{BuildError, PoolBuilder},
66 config::{CreatePoolError, PoolConfig, QueueMode, Timeouts},
67 errors::{PoolError, RecycleError, TimeoutType},
68 hooks::{Hook, HookError, HookFuture, HookResult},
69 manager::{Manager, RecycleResult},
70 metrics::Metrics,
71 object::{Object, ObjectId},
72 pool::{Pool, RetainResult, WeakPool},
73};