use crate::abi::InstanceId;
use crate::state::authz::InvariantLifetime;
use core::marker::PhantomData;
pub struct InstanceScope<'i> {
pub(crate) instance_id: InstanceId,
_brand: InvariantLifetime<'i>,
}
impl<'i> InstanceScope<'i> {
#[doc(hidden)]
pub fn __new_for_skeleton(instance_id: InstanceId) -> Self {
Self {
instance_id,
_brand: PhantomData,
}
}
pub fn instance_id(&self) -> InstanceId {
self.instance_id
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn scope_carries_instance_id() {
let id = InstanceId::new(42).unwrap();
let scope: InstanceScope<'_> = InstanceScope::__new_for_skeleton(id);
assert_eq!(scope.instance_id().get(), 42);
}
#[test]
fn scope_independent_construction_compiles() {
let s1 = InstanceScope::__new_for_skeleton(InstanceId::new(1).unwrap());
let s2 = InstanceScope::__new_for_skeleton(InstanceId::new(2).unwrap());
assert_eq!(s1.instance_id().get(), 1);
assert_eq!(s2.instance_id().get(), 2);
}
}