extern crate syncpool;
use std::vec;
use syncpool::prelude::*;
struct BigStruct {
a: u32,
b: u32,
c: Vec<u8>,
}
impl BigStruct {
fn new() -> Self {
BigStruct {
a: 1,
b: 42,
c: vec::from_elem(0u8, 0x1_000_000),
}
}
fn initializer(mut self: Box<Self>) -> Box<Self> {
self.a = 1;
self.b = 42;
self.c = vec::from_elem(0u8, 0x1_000_000);
self
}
}
fn main() {
call_builder();
call_packer();
}
fn call_builder() {
let mut pool = SyncPool::with_builder(BigStruct::new);
println!("Pool created...");
let big_box = pool.get();
assert_eq!(big_box.a, 1);
assert_eq!(big_box.b, 42);
assert_eq!(big_box.c.len(), 0x1_000_000);
pool.put(big_box);
}
fn call_packer() {
let mut pool = SyncPool::with_packer(BigStruct::initializer);
println!("Pool created...");
let big_box = pool.get();
assert_eq!(big_box.a, 1);
assert_eq!(big_box.b, 42);
assert_eq!(big_box.c.len(), 0x1_000_000);
pool.put(big_box);
}