use crate::object::{MTObjectPtr, ObjectPtr};
use std::pin::Pin;
pub(super) enum SingleOrMultiThreadPtr<T>
where
T: 'static,
{
SingleThread(Pin<ObjectPtr<T>>),
MultiThread(Pin<MTObjectPtr<T>>),
}
impl<T> Clone for SingleOrMultiThreadPtr<T>
where
T: 'static,
{
fn clone(&self) -> Self {
match self {
SingleOrMultiThreadPtr::SingleThread(ptr) => {
SingleOrMultiThreadPtr::SingleThread(ptr.clone())
}
SingleOrMultiThreadPtr::MultiThread(ptr) => {
SingleOrMultiThreadPtr::MultiThread(ptr.clone())
}
}
}
}
impl<T> From<Pin<ObjectPtr<T>>> for SingleOrMultiThreadPtr<T>
where
T: 'static,
{
fn from(ptr: Pin<ObjectPtr<T>>) -> Self {
SingleOrMultiThreadPtr::SingleThread(ptr)
}
}
impl<T> From<Pin<MTObjectPtr<T>>> for SingleOrMultiThreadPtr<T>
where
T: 'static,
{
fn from(ptr: Pin<MTObjectPtr<T>>) -> Self {
SingleOrMultiThreadPtr::MultiThread(ptr)
}
}