archway 0.4.0

Rust traits for Rc and Arc interoperation
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use core::borrow::Borrow;
use core::ops::Deref;

use crate::weak::AnyWeakPointer;

/// Trait for a shared pointer, supporting sized pointee types only
pub trait AnySharedPointer<T: ?Sized>: AsRef<T> + Borrow<T> + Clone + Deref<Target = T> + Sized {
    /// Corresponding weak pointer type
    type Weak: AnyWeakPointer<T>;

    /// Return `self` downgraded to a weak pointer.
    fn downgrade(&self) -> Self::Weak;
    fn from(value: T) -> Self;
}

/// Return type for the `downgrade` function of the [`AnySharedPointer<T>`] type `P`
pub type Downgraded<P, T> = <P as AnySharedPointer<T>>::Weak;