use std::{marker, pin};
pub use crate::base::cell::values::Value;
use crate::base::cell::{Sealed, region};
pub trait Brand: Sealed {}
#[derive(Clone, Copy)]
#[repr(transparent)]
pub struct Identity<'id>(marker::PhantomData<*mut &'id ()>);
impl<'id> Sealed for Identity<'id> {}
impl<'id> Brand for Identity<'id> {}
pub use crate::base::cell::values::Token;
pub fn scope_pinned<T: ?Sized, R>(
root: pin::Pin<&mut T>,
f: impl for<'id> FnOnce(
Token<Identity<'id>>,
(
region::Token<region::Identity<'id>>,
region::Token<region::Identity<'id, 1>>,
),
pin::Pin<&'id mut T>,
) -> R,
) -> R {
f(Token::new(), (Token::new(), Token::new()), root)
}
const _: () = {
assert!(size_of::<Token<Identity<'static>>>() == 0);
assert!(size_of::<Value<Identity<'static>, u64>>() == size_of::<u64>());
assert!(align_of::<Value<Identity<'static>, u64>>() == align_of::<u64>());
};