Transparent

Struct Transparent 

Source
pub struct Transparent<T> { /* private fields */ }
Expand description

A type that transparently implements PartialEq and Hash, to be used in structs that carry additional data that should not be relevant in comparisons.

It additionally supports creating dummy values and they will also compare equal to all other and hash identically.

The use of a Transparent<_> as a field of a struct should be understood to convey the following intent: this field is useful only for diagnostics and is never relevant for decisions. This makes Transparent::forge suitable for use in unit tests where said diagnostic data may not be available and we still want the computation to be unaffected.

In fact the computation is guaranteed to be unaffected because Transparent provides no peeking method, and the only way to extract data is unwrap that will panic if the inner value was forged.

Implementations§

Source§

impl<T> Transparent<T>

Source

pub fn unwrap(self) -> T

Assert that the value was not forged and get its contents.

§Panics

fails if self was obtainedy by Transparent::forge().

Source

pub fn forge(loc: &'static str) -> Self

Create a dummy value.

It is recommended to use the loc parameter as a way to track the location where it was forged so that if it is accidentally unwrapped the error message is more readable, e.g. by using either an identifying string or even better the output of the here!() macro that gives the location in the source code.

Source§

impl<T> Transparent<Option<T>>

Source

pub fn try_override_inner(&mut self, t: T)

If there is not already data, add it. This is a noop if the contents were not forged.

Source§

impl<T> Transparent<Transparent<T>>

Source

pub fn flatten(self) -> Transparent<T>

Remove the outer Transparent

Source§

impl<T> Transparent<Option<T>>

Source

pub fn flatten(self) -> Option<Transparent<T>>

Remove the outer Transparent

Source§

impl<T> Transparent<T>

Source

pub fn from(inner: T) -> Self

Wrap in a transparent.

Source§

impl Transparent<Span>

Source

pub fn join(self, other: Self) -> Option<Self>

Map join to the inner spans

Trait Implementations§

Source§

impl<T: Clone> Clone for Transparent<T>

Source§

fn clone(&self) -> Transparent<T>

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<T> Debug for Transparent<T>

Source§

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

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

impl<T: Display> Display for Transparent<T>

Source§

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

Almost transparent wrapper for display.

Source§

impl<T> Hash for Transparent<T>

Source§

fn hash<H: Hasher>(&self, _: &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<T> PartialEq for Transparent<T>

Source§

fn eq(&self, _: &Self) -> bool

Trivial equality. All Transparent are indistinguishable from each other.

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<T: TrySpan> TrySpan for Transparent<T>

Source§

fn try_span(&self) -> Option<Span>

Sp always has a span, so TrySpan is guaranteed to succeed.

Source§

impl<T: Copy> Copy for Transparent<T>

Source§

impl<T> Eq for Transparent<T>

Auto Trait Implementations§

§

impl<T> Freeze for Transparent<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Transparent<T>
where T: RefUnwindSafe,

§

impl<T> Send for Transparent<T>
where T: Send,

§

impl<T> Sync for Transparent<T>
where T: Sync,

§

impl<T> Unpin for Transparent<T>
where T: Unpin,

§

impl<T> UnwindSafe for Transparent<T>
where T: 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.