pub struct LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue>,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue>,{ /* private fields */ }Implementations§
Source§impl<Root, MutexValue, InnerValue, SubValue, G, S> LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
MutexValue: Borrow<Arc<Mutex<InnerValue>>>,
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue>,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue>,
impl<Root, MutexValue, InnerValue, SubValue, G, S> LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
MutexValue: Borrow<Arc<Mutex<InnerValue>>>,
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue>,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue>,
Sourcepub fn new(
outer: Kp<Root, MutexValue>,
inner: KpType<InnerValue, SubValue, G, S>,
) -> Self
pub fn new( outer: Kp<Root, MutexValue>, inner: KpType<InnerValue, SubValue, G, S>, ) -> Self
Create an LKp from two simple keypaths
- outer: keypath from Root to Arc<Mutex
> - inner: keypath from InnerValue to SubValue
pub fn then<NextValue, G2, S2>(
self,
next: KpType<SubValue, NextValue, G2, S2>,
) -> LKp<Root, MutexValue, InnerValue, NextValue, impl for<'r> Fn(&'r InnerValue) -> Option<&'r NextValue>, impl for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut NextValue>>where
InnerValue: 'static,
SubValue: 'static,
NextValue: 'static,
G2: for<'r> Fn(&'r SubValue) -> Option<&'r NextValue>,
S2: for<'r> Fn(&'r mut SubValue) -> Option<&'r mut NextValue>,
Sourcepub fn get_cloned(&self, root: &Root) -> Option<SubValue>where
SubValue: Clone,
pub fn get_cloned(&self, root: &Root) -> Option<SubValue>where
SubValue: Clone,
Consider using the fn only when value is of type Rc or Arc else it will clone.
pub fn get_arc(&self, root: &Root) -> Option<Arc<SubValue>>where
SubValue: Clone,
pub fn get_mut<F, SubSubValue>(
&self,
root: &mut Root,
f: F,
) -> Option<SubSubValue>where
F: FnOnce(&mut SubValue) -> SubSubValue,
pub fn get<F, SubSubValue>(&self, root: &Root, f: F) -> Option<SubSubValue>
Source§impl<Root, MutexValue, InnerValue, SubValue, G, S> LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
MutexValue: Borrow<Arc<Mutex<InnerValue>>>,
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue>,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue>,
impl<Root, MutexValue, InnerValue, SubValue, G, S> LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
MutexValue: Borrow<Arc<Mutex<InnerValue>>>,
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue>,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue>,
Sourcepub fn and_then_with<NextInner, NextValue, G2, S2, F, R>(
&self,
next_inner: &KpType<NextInner, NextValue, G2, S2>,
root: &Root,
callback: F,
) -> Option<R>where
SubValue: Borrow<Arc<Mutex<NextInner>>>,
G2: for<'r> Fn(&'r NextInner) -> Option<&'r NextValue>,
S2: for<'r> Fn(&'r mut NextInner) -> Option<&'r mut NextValue>,
F: FnOnce(&NextValue) -> R,
pub fn and_then_with<NextInner, NextValue, G2, S2, F, R>(
&self,
next_inner: &KpType<NextInner, NextValue, G2, S2>,
root: &Root,
callback: F,
) -> Option<R>where
SubValue: Borrow<Arc<Mutex<NextInner>>>,
G2: for<'r> Fn(&'r NextInner) -> Option<&'r NextValue>,
S2: for<'r> Fn(&'r mut NextInner) -> Option<&'r mut NextValue>,
F: FnOnce(&NextValue) -> R,
Chain through another mutex layer with callback-based access (safer)
Sourcepub fn and_then_with_mut<NextInner, NextValue, G2, S2, F, R>(
&self,
next_inner: &KpType<NextInner, NextValue, G2, S2>,
root: &mut Root,
callback: F,
) -> Option<R>where
SubValue: Borrow<Arc<Mutex<NextInner>>>,
G2: for<'r> Fn(&'r NextInner) -> Option<&'r NextValue>,
S2: for<'r> Fn(&'r mut NextInner) -> Option<&'r mut NextValue>,
F: FnOnce(&mut NextValue) -> R,
pub fn and_then_with_mut<NextInner, NextValue, G2, S2, F, R>(
&self,
next_inner: &KpType<NextInner, NextValue, G2, S2>,
root: &mut Root,
callback: F,
) -> Option<R>where
SubValue: Borrow<Arc<Mutex<NextInner>>>,
G2: for<'r> Fn(&'r NextInner) -> Option<&'r NextValue>,
S2: for<'r> Fn(&'r mut NextInner) -> Option<&'r mut NextValue>,
F: FnOnce(&mut NextValue) -> R,
Mutable version of and_then_with
Trait Implementations§
Source§impl<Root: Debug, MutexValue: Debug, InnerValue: Debug, SubValue: Debug, G, S> Debug for LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue> + Debug,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue> + Debug,
impl<Root: Debug, MutexValue: Debug, InnerValue: Debug, SubValue: Debug, G, S> Debug for LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: for<'r> Fn(&'r InnerValue) -> Option<&'r SubValue> + Debug,
S: for<'r> Fn(&'r mut InnerValue) -> Option<&'r mut SubValue> + Debug,
Auto Trait Implementations§
impl<Root, MutexValue, InnerValue, SubValue, G, S> Freeze for LKp<Root, MutexValue, InnerValue, SubValue, G, S>
impl<Root, MutexValue, InnerValue, SubValue, G, S> RefUnwindSafe for LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: RefUnwindSafe,
S: RefUnwindSafe,
Root: RefUnwindSafe,
MutexValue: RefUnwindSafe,
InnerValue: RefUnwindSafe,
SubValue: RefUnwindSafe,
impl<Root, MutexValue, InnerValue, SubValue, G, S> Send for LKp<Root, MutexValue, InnerValue, SubValue, G, S>
impl<Root, MutexValue, InnerValue, SubValue, G, S> Sync for LKp<Root, MutexValue, InnerValue, SubValue, G, S>
impl<Root, MutexValue, InnerValue, SubValue, G, S> Unpin for LKp<Root, MutexValue, InnerValue, SubValue, G, S>
impl<Root, MutexValue, InnerValue, SubValue, G, S> UnsafeUnpin for LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: UnsafeUnpin,
S: UnsafeUnpin,
impl<Root, MutexValue, InnerValue, SubValue, G, S> UnwindSafe for LKp<Root, MutexValue, InnerValue, SubValue, G, S>where
G: UnwindSafe,
S: UnwindSafe,
Root: UnwindSafe,
MutexValue: UnwindSafe,
InnerValue: UnwindSafe,
SubValue: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more