use alloc::rc::{Rc, Weak};
use crate::kind::PointerKind;
use crate::shared::AnySharedPointer;
use crate::weak::AnyWeakPointer;
impl<T> AnySharedPointer<T> for Rc<T> {
type Weak = Weak<T>;
fn downgrade(&self) -> Self::Weak {
Rc::downgrade(self)
}
fn from(value: T) -> Self {
Self::new(value)
}
}
impl<T> AnyWeakPointer<T> for Weak<T> {
type Shared = Rc<T>;
fn upgrade(&self) -> Option<Self::Shared> {
Weak::upgrade(self)
}
}
#[derive(Debug, Copy, Clone)]
pub struct RcKind;
impl PointerKind for RcKind {
type Shared<T> = Rc<T>;
type Weak<T> = Weak<T>;
}