2 releases

0.1.1 Aug 13, 2019
0.1.0 Jul 31, 2019

#292 in No standard library

MIT/Apache

18KB
147 lines

Build Status Documentation Crates.io

This library provides traits for borrow and borrow_mut functions, most commonly found in RefCells. Therefore it is possible to accept other kinds of RefCells like an AtomicRefCell or smart pointers around RefCells like Arc, Rc or Box.

Example

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

Usage

Simply add the following line to your Cargo.toml under [dependencies]:

borrow_trait = { version = "0.1" }

Notes

  • 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.

Planned

  • Remove the lifetime requirement of BorrowRef<'a, C, T> and BorrowRefMut<'a, C, T>. This feature requires Generic Associated Lifetimes rust-lang/rust#44265

Credits

  • 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.

License

This project is licensed under either of

at your option.

Contribution

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

Dependencies

~14KB