pub struct InterruptRef<'b, T: ?Sized + 'b> { /* private fields */ }
Expand description
Wraps a borrowed reference to a value in a InterruptRefCell
box.
A wrapper type for an immutably borrowed value from a InterruptRefCell<T>
.
See the module-level documentation for more.
Implementations§
Source§impl<'b, T: ?Sized> InterruptRef<'b, T>
impl<'b, T: ?Sized> InterruptRef<'b, T>
Sourcepub fn clone(orig: &InterruptRef<'b, T>) -> InterruptRef<'b, T>
pub fn clone(orig: &InterruptRef<'b, T>) -> InterruptRef<'b, T>
Copies a InterruptRef
.
The InterruptRefCell
is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as
InterruptRef::clone(...)
. A Clone
implementation or a method would interfere
with the widespread use of r.borrow().clone()
to clone the contents of
a InterruptRefCell
.
Sourcepub fn map<U: ?Sized, F>(orig: InterruptRef<'b, T>, f: F) -> InterruptRef<'b, U>
pub fn map<U: ?Sized, F>(orig: InterruptRef<'b, T>, f: F) -> InterruptRef<'b, U>
Makes a new InterruptRef
for a component of the borrowed data.
The InterruptRefCell
is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as InterruptRef::map(...)
.
A method would interfere with methods of the same name on the contents
of a InterruptRefCell
used through Deref
.
§Examples
use interrupt_ref_cell::{InterruptRefCell, InterruptRef};
let c = InterruptRefCell::new((5, 'b'));
let b1: InterruptRef<'_, (u32, char)> = c.borrow();
let b2: InterruptRef<'_, u32> = InterruptRef::map(b1, |t| &t.0);
assert_eq!(*b2, 5)
Sourcepub fn filter_map<U: ?Sized, F>(
orig: InterruptRef<'b, T>,
f: F,
) -> Result<InterruptRef<'b, U>, Self>
pub fn filter_map<U: ?Sized, F>( orig: InterruptRef<'b, T>, f: F, ) -> Result<InterruptRef<'b, U>, Self>
Makes a new InterruptRef
for an optional component of the borrowed data. The
original guard is returned as an Err(..)
if the closure returns
None
.
The InterruptRefCell
is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as
InterruptRef::filter_map(...)
. A method would interfere with methods of the same
name on the contents of a InterruptRefCell
used through Deref
.
§Examples
use interrupt_ref_cell::{InterruptRefCell, InterruptRef};
let c = InterruptRefCell::new(vec![1, 2, 3]);
let b1: InterruptRef<'_, Vec<u32>> = c.borrow();
let b2: Result<InterruptRef<'_, u32>, _> = InterruptRef::filter_map(b1, |v| v.get(1));
assert_eq!(*b2.unwrap(), 2);
Sourcepub fn map_split<U: ?Sized, V: ?Sized, F>(
orig: InterruptRef<'b, T>,
f: F,
) -> (InterruptRef<'b, U>, InterruptRef<'b, V>)
pub fn map_split<U: ?Sized, V: ?Sized, F>( orig: InterruptRef<'b, T>, f: F, ) -> (InterruptRef<'b, U>, InterruptRef<'b, V>)
Splits a InterruptRef
into multiple InterruptRef
s for different components of the
borrowed data.
The InterruptRefCell
is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as
InterruptRef::map_split(...)
. A method would interfere with methods of the same
name on the contents of a InterruptRefCell
used through Deref
.
§Examples
use interrupt_ref_cell::{InterruptRefCell, InterruptRef};
let cell = InterruptRefCell::new([1, 2, 3, 4]);
let borrow = cell.borrow();
let (begin, end) = InterruptRef::map_split(borrow, |slice| slice.split_at(2));
assert_eq!(*begin, [1, 2]);
assert_eq!(*end, [3, 4]);