use dynamic_pool::{DynamicPool, DynamicReset};
#[derive(Default)]
struct Person {
name: String,
age: u16,
}
impl DynamicReset for Person {
fn reset(&mut self) {
self.name.clear();
self.age = 0;
}
}
fn main() {
let pool = DynamicPool::new(1, 10, Person::default);
assert_eq!(pool.available(), 1);
let mut person = pool.take();
person.name = "jake".into();
person.age = 99;
assert_eq!(pool.available(), 0);
drop(person);
assert_eq!(pool.available(), 1);
let person = pool.take();
assert_eq!(person.name, "");
assert_eq!(person.age, 0);
assert_eq!(pool.available(), 0);
assert!(pool.try_take().is_none());
drop(person);
assert_eq!(pool.available(), 1);
let person = pool.try_take().unwrap();
let person = person.detach();
drop(person);
assert_eq!(pool.available(), 0);
}