[−][src]Trait borrow_trait::BorrowRefMut
A trait for mutably borrowing data.
The borrow
function returns an mutable reference to Self::Target
.
use std::ops::DerefMut; use std::cell::RefCell; use borrow_trait::{ BorrowRefMut }; fn takes_bound<T>(value: &T) where T: for<'a> BorrowRefMut<'a, Target = String>, { assert_eq!(value.borrow_mut().deref_mut(), &mut "Hello World".to_string()); } let value = RefCell::new("Hello World".to_string()); takes_bound(&value)
Implementation Example
Implementing BorrowRefMut
for RefCell:
ⓘThis example is not tested
use std::cell::{ RefMut, RefCell }; use borrow_trait::{ BorrowRefMut }; impl<'a, T: 'a> BorrowRefMut<'a> for RefCell<T> { type Target = T; type Pointer = RefMut<'a, Self::Target>; fn borrow_mut(&'a self) -> Self::Pointer { RefCell::borrow_mut(self) } }
Associated Types
type Target
The type, that is wrapped by the implementation.
Example
A RefCell<T>
wraps around T
therefore Target
has to be T
ⓘThis example is not tested
type Target = T;
type Pointer: 'a + DerefMut<Target = Self::Target>
The type returned by the implementor.
Example
A RefCell
returns RefMut
so Pointer
has to be RefMut
.
ⓘThis example is not tested
type Pointer = RefMut<'a, Self::Target>;
Required methods
fn borrow_mut(&'a self) -> Self::Pointer
Mutably borrows the wrapped value. The value cannot be borrowed while this borrow is active.
Panics
The function should panic, if the value is currently borrowed.
Example
use std::ops::DerefMut; use std::cell::RefCell; use borrow_trait::{ BorrowRefMut }; fn takes_bound<T>(value: &T) where T: for<'a> BorrowRefMut<'a, Target = String>, { assert_eq!(value.borrow_mut().deref_mut(), &mut "Hello World".to_string()); } let value = RefCell::new("Hello World".to_string()); takes_bound(&value)
An example of panic:
ⓘThis example is not tested
use std::ops::DerefMut; use std::cell::RefCell; use borrow_trait::{ BorrowRefMut }; use std::panic; fn takes_bound<T>(value: &T) where T: for<'a> BorrowRefMut<'a, Target = String>, { let result = panic::catch_unwind(move || { let mut first_borrow = value.borrow_mut(); let mut second_borrow = value.borrow_mut(); // this causes a panic assert_eq!(first_borrow.deref_mut(), &mut "Hello World".to_string()); assert_eq!(second_borrow.deref_mut(), &mut "Hello World".to_string()); }); assert!(result.is_err()); } let value = RefCell::new("Hello World".to_string()); takes_bound(&value)
Implementations on Foreign Types
impl<'a, T: 'a> BorrowRefMut<'a> for RefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ RefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ mut RefCell<T>
[src]
impl<'a, T: 'a> BorrowRefMut<'a> for AtomicRefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ AtomicRefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ mut AtomicRefCell<T>
[src]
impl<'a, T: 'a> BorrowRefMut<'a> for RefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ RefCell<T>
[src]
impl<'a, '_, T: 'a> BorrowRefMut<'a> for &'_ mut RefCell<T>
[src]
impl<'a, K: 'a, T: 'a> BorrowRefMut<'a> for Rc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ Rc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ mut Rc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, K: 'a, T: 'a> BorrowRefMut<'a> for Arc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ Arc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ mut Arc<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, K: 'a, T: 'a> BorrowRefMut<'a> for Box<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ Box<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,
type Target = K
type Pointer = <T as BorrowRefMut<'a>>::Pointer
fn borrow_mut(&'a self) -> Self::Pointer
[src]
impl<'a, '_, K: 'a, T: 'a> BorrowRefMut<'a> for &'_ mut Box<T> where
T: BorrowRefMut<'a, Target = K>,
[src]
T: BorrowRefMut<'a, Target = K>,