borrow_trait

Crates.ioborrow_trait
lib.rsborrow_trait
version0.1.1
sourcesrc
created_at2019-07-31 09:52:13.35313
updated_at2019-08-13 10:29:43.688146
descriptionExposes traits for `borrow` and `borrow_mut`.
homepage
repositoryhttps://github.com/Luro02/borrow_trait
max_upload_size
id153174
size18,935
Lucas (Luro02)

documentation

README

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
Commit count: 5

cargo fmt