Struct mavio::protocol::Behold

source ·
pub struct Behold<T>(/* private fields */);
Expand description

Return type for operations which require attention from the caller.

Such operations may lead to data corruption or return data that may be misleading in some circumstances. In other scenarios, Behold marks seemingly “innocent” methods or functions, that perform costly operations, clone large amounts of data, or spawn treads. By any means, this is just a reminder for the caller that certain aspects of the operation require their close attention.

In some sense, Behold serves as an opinionated replacement for a relatively widespread practice of marking with unsafe methods and functions that, while being safe from the Rust perspective, still require certain care from the caller. We’ve decided to refrain from such practice since: (a) some projects may restrict using unsafe Rust, (b) our use cases do not strictly coincide with operations, that may lead to undecided behavior (even in wider sense).

Once Behold is obtained, the caller can either explicitly accept the consequences, retrieving the result by calling Behold::unwrap, or discard the value with Behold::discard.

Implementations§

source§

impl<T> Behold<T>

source

pub fn new(value: T) -> Self

Creates an unsafe wrapper for a value.

source

pub fn unwrap(self) -> T

Accept the consequences and retrieve the wrapped value.

The accepted values are #[must_use].

source

pub fn discard(self)

Discards the wrapped value.

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<T> UnwindSafe for Behold<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> 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> Same for T

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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.