rogue_runtime/
object_ref.rs

1use std::marker::PhantomData;
2
3use ulid::Ulid;
4
5use crate::{Identity, InstanceId, RuntimeId};
6
7#[derive(serde::Deserialize, serde::Serialize)]
8pub struct ObjectRef<T> {
9    runtime_id: RuntimeId,
10    data_id: Ulid,
11    phantom: PhantomData<T>,
12}
13
14impl<T> Identity for ObjectRef<T>
15where
16    T: Send + Sync,
17{
18    fn id(&self) -> &InstanceId {
19        &self.data_id
20    }
21}
22
23impl<T> ObjectRef<T> {
24    pub fn create(runtime_id: RuntimeId, data_id: InstanceId) -> Self {
25        Self {
26            runtime_id,
27            data_id,
28            phantom: PhantomData,
29        }
30    }
31
32    pub fn runtime_id(&self) -> RuntimeId {
33        self.runtime_id.clone()
34    }
35}