A type-safe, heterogeneous collection with zero-cost add and borrow.
BorrowBag
allows the storage of any value, and returns a Handle
which can be
used to borrow the value back later. As the BorrowBag
is add-only, Handle
values remain valid for the lifetime of the BorrowBag
.
For usage details, please see the documentation
Initially, BorrowBag
was conceived to solve the problem of storing concrete
types implementing a certain trait, without losing their type information, and
with an ability to borrow them back later.
The original implementation was generic enough that it was immediately extracted into this crate.
Please create an issue or pull request so your use case can be added here.
```rust extern crate borrow_bag;
use borrowbag::newborrow_bag;
struct X(u8); struct Y(u8);
fn main() { let bag = newborrowbag(); let (bag, xhandle) = bag.add(X(1)); let (bag, yhandle) = bag.add(Y(2));
let x: &X = bag.borrow(x_handle);
assert_eq!(x.0, 1);
let y: &Y = bag.borrow(y_handle);
assert_eq!(y.0, 2);
} ```
Issues welcome.
Contributions welcome via pull request.