mod arc;
mod rc;
pub use arc::*;
pub use rc::*;
use crate::shared::{AnySharedPointer, Downgraded};
use crate::weak::{AnyWeakPointer, Upgraded};
pub trait PointerKind {
type Shared<T>: AnySharedPointer<T>;
type Weak<T>: AnyWeakPointer<T>;
fn shared<T>(value: T) -> Self::Shared<T> {
<Self::Shared<T> as AnySharedPointer<T>>::from(value)
}
}
pub type PointerKindDowngraded<P, T> = Downgraded<<P as PointerKind>::Shared<T>, T>;
pub type PointerKindUpgraded<P, T> = Upgraded<<P as PointerKind>::Weak<T>, T>;