toast-cell 0.2.0

Zero-cost type-branded cell with no runtime checks
Documentation
/// ```compile_fail,E0505
/// use toast_cell::{type_factory, GhostCell, GhostToken};
///
/// let brand = unsafe { type_factory::init() };
/// let token = GhostToken::new(brand);
/// let cell = GhostCell::new(1);
///
/// let borrow = cell.borrow(&token);
/// core::mem::drop(token);
/// assert_eq!(*borrow, 1);
/// ```
fn _cell_borrow_borrows_token() {}

/// ```compile_fail,E0502
/// use toast_cell::{type_factory, GhostCell, GhostToken};
///
/// let brand = unsafe { type_factory::init() };
/// let mut token = GhostToken::new(brand);
/// let cell1 = GhostCell::new(0);
/// let cell2 = GhostCell::new(2);
///
/// let borrow1 = cell1.borrow_mut(&mut token);
/// let borrow2 = cell2.borrow(&token);
/// assert_eq!(*borrow2, 2);
///
/// *borrow1 += 1;
/// ```
fn _cell_borrow_mut_borrows_token() {}

/// ```compile_fail,E0505
/// use toast_cell::{type_factory, GhostCell, GhostToken};
///
/// let brand = unsafe { type_factory::init() };
/// let token = GhostToken::new(brand);
/// let cell = GhostCell::new(1);
///
/// let borrow = cell.borrow(&token);
/// core::mem::drop(cell);
/// assert_eq!(*borrow, 1);
/// ```
fn _cell_borrow_borrows_cell() {}

/// ```compile_fail,E0505
/// use toast_cell::{type_factory, GhostCell, GhostToken};
///
/// let brand = unsafe { type_factory::init() };
/// let mut token = GhostToken::new(brand);
/// let cell = GhostCell::new(0);
///
/// let borrow = cell.borrow_mut(&mut token);
/// core::mem::drop(cell);
/// *borrow += 1;
/// ```
fn _cell_borrow_mut_borrows_cell() {}

/// ```compile_fail,E0502
/// use toast_cell::{type_factory, GhostCell, GhostToken};
///
/// let mut value = [1, 2, 3];
/// let cell = GhostCell::from_mut(&mut value);
/// assert_eq!(value, [1, 2, 3]);
///
/// // Appease the typechecker.
/// let brand = unsafe { type_factory::init() };
/// let token = GhostToken::new(brand);
/// let _ = cell.borrow(&token);
/// ```
fn _cell_from_mut_borrows_value() {}