Struct arc_swap::access::AccessConvert [−][src]
pub struct AccessConvert<D>(pub D);
Expand description
A workaround to allow double-dyn mapping, since Box<dyn DynAccess>
doesn’t implement Access
and Map needs that.
use std::sync::Arc; use arc_swap::ArcSwap; use arc_swap::access::{AccessConvert, DynAccess, Map}; struct Inner { val: usize, } struct Middle { inner: Inner, } struct Outer { middle: Middle, } let outer = Arc::new(ArcSwap::from_pointee(Outer { middle: Middle { inner: Inner { val: 42, } } })); let middle: Arc<dyn DynAccess<Middle>> = Arc::new(Map::new(outer, |outer: &Outer| &outer.middle)); let inner: Arc<dyn DynAccess<Inner>> = Arc::new(Map::new(AccessConvert(middle), |middle: &Middle| &middle.inner)); let guard = inner.load(); assert_eq!(42, guard.val);
Trait Implementations
Auto Trait Implementations
impl<D> RefUnwindSafe for AccessConvert<D> where
D: RefUnwindSafe,
D: RefUnwindSafe,
impl<D> Send for AccessConvert<D> where
D: Send,
D: Send,
impl<D> Sync for AccessConvert<D> where
D: Sync,
D: Sync,
impl<D> Unpin for AccessConvert<D> where
D: Unpin,
D: Unpin,
impl<D> UnwindSafe for AccessConvert<D> where
D: UnwindSafe,
D: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T, A> DynAccess<T> for A where
A: Access<T>,
<A as Access<T>>::Guard: 'static,
[src]
impl<T, A> DynAccess<T> for A where
A: Access<T>,
<A as Access<T>>::Guard: 'static,
[src]pub fn load(&Self) -> DynGuard<T>
[src]
pub fn load(&Self) -> DynGuard<T>
[src]The equivalent of Access::load
.