use async_trait::async_trait;
use qp::resource::Manage;
use qp::{Pool, Pooled};
pub struct IntManager;
#[async_trait]
impl Manage for IntManager {
type Output = i32;
type Error = ();
async fn try_create(&self) -> Result<Self::Output, Self::Error> {
Ok(0)
}
async fn validate(&self, resource: &Self::Output) -> bool {
resource >= &0
}
}
#[tokio::main]
async fn main() {
let pool = Pool::new(IntManager, 1);
dbg!(pool.max_size()); dbg!(pool.size());
let mut int = pool.acquire().await.unwrap();
*int = 1;
dbg!(*int); dbg!(Pooled::is_valid(&int).await);
dbg!(pool.size());
drop(int);
let mut int = pool.acquire().await.unwrap();
dbg!(*int); *int = 100;
drop(int);
let mut int = pool.acquire().await.unwrap();
dbg!(*int); *int = -1; dbg!(Pooled::is_valid(&int).await); drop(int);
let int = pool.acquire_unchecked().await.unwrap();
dbg!(*int); drop(int);
let int = pool.acquire().await.unwrap();
dbg!(*int);
let raw_int: i32 = Pooled::take(int); dbg!(raw_int); drop(raw_int);
let _int = pool.acquire().await.unwrap();
}