Skip to main content

archway/kind/
rc.rs

1use alloc::rc::{Rc, Weak};
2
3use crate::kind::PointerKind;
4use crate::shared::AnySharedPointer;
5use crate::weak::AnyWeakPointer;
6
7impl<T> AnySharedPointer<T> for Rc<T> {
8    type Weak = Weak<T>;
9    fn downgrade(&self) -> Self::Weak {
10        Rc::downgrade(self)
11    }
12    fn from(value: T) -> Self {
13        Self::new(value)
14    }
15}
16impl<T> AnyWeakPointer<T> for Weak<T> {
17    type Shared = Rc<T>;
18    fn upgrade(&self) -> Option<Self::Shared> {
19        Weak::upgrade(self)
20    }
21}
22
23/// [`PointerKind`] implementor for [`Rc`].
24#[derive(Debug, Copy, Clone)]
25pub struct RcKind;
26
27impl PointerKind for RcKind {
28    type Shared<T> = Rc<T>;
29    type Weak<T> = Weak<T>;
30}