This library provides traits for borrow
and borrow_mut
functions, most commonly found in RefCell
s. Therefore it is possible to accept other kinds of RefCell
s like an AtomicRefCell
or smart pointers around RefCell
s like Arc
, Rc
or Box
.
use std::io::{ Read, Cursor };
use std::cell::RefCell;
use borrow_trait::{ BorrowRefMut };
fn takes_bound<C, T>(value: &T) -> Vec<u8>
where
T: for<'a> BorrowRefMut<'a, Target = C>,
C: Read,
{
let mut result = vec![];
value.borrow_mut().read_to_end(&mut result).expect("Failed to read from `value: T`");
result
}
let value = RefCell::new(Cursor::new(vec![0, 1, 2, 3]));
assert_eq!(takes_bound(&value), vec![0, 1, 2, 3]);
For more details please refer to the documentation, that you can find here: https://docs.rs/borrow_trait
Simply add the following line to your Cargo.toml
under [dependencies]
:
borrow_trait = { version = "0.1" }
- This crate does conform to semantic versioning.
- It contains not a single line of unsafe code.
- This crate re-exports it's dependencies for ease of use.
- Remove the lifetime requirement of
BorrowRef<'a, C, T>
andBorrowRefMut<'a, C, T>
. This feature requires Generic Associated Lifetimes rust-lang/rust#44265
- Parts of the documentation were copied from the std library
- The feature flags were inspired by the serde and rand crate.
- The name for the traits were inspired by borrow_with_ref_obj crate.
This project is licensed under either of
at your option.
If you have any issue please don't hesitate to create one :)
Before you make a PR please ensure, that your code has been formatted with rustfmt
:
cargo fmt