Skip to content

Traits for `borrow` and `borrow_mut` functions most commonly found in `RefCell`s

Notifications You must be signed in to change notification settings

Luro02/borrow_trait

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Traits for `borrow` and `borrow_mut` functions most commonly found in `RefCell`s

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages