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