Trait Mutability
pub trait Mutability:
Sized
+ 'static
+ Copy
+ Sealed {
const SELF: Self;
const RENDER: &'static str;
const CONTAINS_MUTABILITY: bool = false;
const PEANO_NUMBER: usize = 0usize;
// Provided methods
fn freeze(self) -> Frozen<Self> { ... }
fn thaw(_: Frozen<Self>) -> Self { ... }
}Expand description
Generalized mutability permissions.
This trait enables referent structures to be generic over the write permissions
of their referent data. As an example, the standard library defines *const T
and *mut T as two duplicate type families, that cannot share any logic at all.
An equivalent library implementation might be Ptr<T, M: Mutability>, where
shared logic can be placed in an impl<T, M> Ptr<T, M> block, but unique logic
(such as freezing a Mut pointer, or unfreezing a Frozen<Mut>) can be placed
in specialized impl<T> Ptr<T, Mut> blocks.
Required Associated Constants§
const SELF: Self
const SELF: Self
Allow instances to be constructed generically.
Provided Associated Constants§
const CONTAINS_MUTABILITY: bool = false
const CONTAINS_MUTABILITY: bool = false
Marks whether this type contains mutability permissions within it.
This is false for Const and true for Mut. Frozen wrappers
atop either of these types inherit their interior marker.
const PEANO_NUMBER: usize = 0usize
const PEANO_NUMBER: usize = 0usize
Counts the layers of Frozen<> wrapping around a base Const or Mut.
Provided Methods§
fn freeze(self) -> Frozen<Self>
fn freeze(self) -> Frozen<Self>
Freeze this type, wrapping it in a const marker that may later be
removed to thaw it.
fn thaw(_: Frozen<Self>) -> Self
fn thaw(_: Frozen<Self>) -> Self
Thaw a previously-frozen type, removing its Frozen marker and
restoring it to Self.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.