Struct SameLayout

Source
pub struct SameLayout<A, B>(/* private fields */);
Expand description

A proof type, showing two types A and B have the same layout.

Implementations§

Source§

impl<A, B> SameLayout<A, B>

Source

pub const fn new() -> Option<Self>

Source

pub fn forget_vec(self, vec: Vec<A>) -> Vec<B>

‘Transmute’ a vector by reusing its buffer. NOTE: This will forget all elements. You must clear the vector first if they are important, or set_len on the result if you can guarantee that old elements are valid initializers for the new type. This affords more flexibility for the caller as they might want to use As as an initializer for Bs which would be invalid if we dropped them. Manually drain the vector if this is not desirable.

Source

pub fn deinit_box(self, boxed: Box<A>) -> (A, Box<MaybeUninit<B>>)

‘Transmute’ a box by reusing its buffer. NOTE: for the same flexibility as Vec, forget about the returned A.

Source§

impl<A, B> SameLayout<A, B>

Source

pub const fn array<const N: usize>(self) -> SameLayout<[A; N], [B; N]>

Source

pub const fn chain<C>(self, _: SameLayout<B, C>) -> SameLayout<A, C>

Apply a transitive argument to construct a new relation proof.

Source

pub const fn transpose(self) -> SameLayout<B, A>

Use commutativity of equality.

Trait Implementations§

Source§

impl<A, B> Clone for SameLayout<A, B>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<A: Debug, B: Debug> Debug for SameLayout<A, B>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<A: Hash, B: Hash> Hash for SameLayout<A, B>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<A: PartialEq, B: PartialEq> PartialEq for SameLayout<A, B>

Source§

fn eq(&self, other: &SameLayout<A, B>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A, B> Copy for SameLayout<A, B>

Source§

impl<A: Eq, B: Eq> Eq for SameLayout<A, B>

Source§

impl<A, B> StructuralPartialEq for SameLayout<A, B>

Auto Trait Implementations§

§

impl<A, B> Freeze for SameLayout<A, B>

§

impl<A, B> RefUnwindSafe for SameLayout<A, B>

§

impl<A, B> Send for SameLayout<A, B>
where A: Send, B: Send,

§

impl<A, B> Sync for SameLayout<A, B>
where A: Sync, B: Sync,

§

impl<A, B> Unpin for SameLayout<A, B>
where A: Unpin, B: Unpin,

§

impl<A, B> UnwindSafe for SameLayout<A, B>
where A: UnwindSafe, B: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.