use std::marker::PhantomData;
use ulid::Ulid;
use crate::{Identity, InstanceId, RuntimeId};
#[derive(serde::Deserialize, serde::Serialize)]
pub struct ObjectRef<T> {
runtime_id: RuntimeId,
data_id: Ulid,
phantom: PhantomData<T>,
}
impl<T> Identity for ObjectRef<T>
where
T: Send + Sync,
{
fn id(&self) -> &InstanceId {
&self.data_id
}
}
impl<T> ObjectRef<T> {
pub fn create(runtime_id: RuntimeId, data_id: InstanceId) -> Self {
Self {
runtime_id,
data_id,
phantom: PhantomData,
}
}
pub fn runtime_id(&self) -> RuntimeId {
self.runtime_id.clone()
}
}