rogue-runtime 0.1.0

Async RPC Runtime
Documentation
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()
    }
}