# BlockingObjectPool
A thread safe, blocking, object pool in rust.
### Summary
* `BlockingObjectPool::with_capacity` or `BlockingObjectPool::with_objects` to initialize a pool
* `pool.get` to obtain a object from the pool
If the pool is empty, `get` will be blocked.
If the object is out of scope, it's been put back to the pool automatically.
That's all!
### Examples
```rust
extern crate blocking_object_pool;
use blocking_object_pool::BlockingObjectPool;
#[derive(Clone)]
struct Hello {
a: i32,
b: i32,
}
fn main() {
let pool = BlockingObjectPool::with_capacity(2, || Hello { a: 1, b: 2 });
// get one object
let m = pool.get();
assert_eq!(m.a, 1);
println!("one. m.a={}", m.a);
// get another object.
{
let mut m = pool.get();
println!("two. m.a={}", m.a);
m.a = 11;
} // here the 2nd object goes out of scope, and it's been put back to the pool automatically.
// you can either call drop(m) manually.
let m = pool.get();
assert_eq!(m.a, 11);
println!("two again, m.a={}", m.a);
println!("this line will be blocked for ever");
let _m = pool.get();
}
```
Inspired by zslayton's [lifeguard](https://github.com/zslayton/lifeguard).