Enum core_extensions::Void
source · pub enum Void {}
Expand description
Type for impossible situations.
Use this as a type parameter to enums to make the variants that use it unconstructible.
§Interaction with unsafe code
It is only valid to convert to Void from other Void-like types, it is undefined behavior to convert from any constructible type, even if zero-sized.
§Example, infinite loop which only returns on error.
ⓘ
use core_extensions::{ResultLikeExt, Void};
#[derive(Debug,PartialEq)]
enum Error<T>{
InvalidItem(T),
IteratorWasntInfinite,
}
fn reading_numbers<I>(i: I) -> Result<Void, Error<usize>>
where I: IntoIterator<Item = usize>
{
for elem in i{
if elem == 0 { return Err(Error::InvalidItem(elem)) }
println!("{}", elem);
}
Err(Error::IteratorWasntInfinite)
}
assert_eq!(reading_numbers(1..100).into_error(), Error::IteratorWasntInfinite);
assert_eq!(reading_numbers(0..).into_error(), Error::InvalidItem(0));
Implementations§
Trait Implementations§
source§impl From<Infallible> for Void
impl From<Infallible> for Void
There’s also a impl From<Void> for std_::convert::Infallible
impl
that’s not appearing in the docs for some reason.
source§fn from(this: Infallible) -> Self
fn from(this: Infallible) -> Self
Converts to this type from the input type.
source§impl From<Void> for Infallible
impl From<Void> for Infallible
source§impl Ord for Void
impl Ord for Void
source§impl<T: ?Sized> PartialOrd<T> for Void
impl<T: ?Sized> PartialOrd<T> for Void
impl Copy for Void
impl Eq for Void
Auto Trait Implementations§
impl Freeze for Void
impl RefUnwindSafe for Void
impl Send for Void
impl Sync for Void
impl Unpin for Void
impl UnwindSafe for Void
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Emulates the pipeline operator, allowing method syntax in more places. Read more
source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
The same as
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moresource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
The same as
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Mutates self using a closure taking self by mutable reference,
passing it along the method chain. Read more
source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Observes the value of self, passing it along unmodified.
Useful in long method chains. Read more
source§fn as_ref_<T: ?Sized>(&self) -> &Twhere
Self: AsRef<T>,
fn as_ref_<T: ?Sized>(&self) -> &Twhere
Self: AsRef<T>,
Performs a reference to reference conversion with
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read moresource§impl<T> TypeIdentity for Twhere
T: ?Sized,
impl<T> TypeIdentity for Twhere
T: ?Sized,
source§fn as_type_mut(&mut self) -> &mut Self::Type
fn as_type_mut(&mut self) -> &mut Self::Type
Converts a mutable reference back to the original type.
source§fn into_type_box(self: Box<Self>) -> Box<Self::Type>
fn into_type_box(self: Box<Self>) -> Box<Self::Type>
Converts a box back to the original type.
source§fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
Converts an Arc back to the original type. Read more
source§fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
Converts an Rc back to the original type. Read more
source§fn from_type_ref(this: &Self::Type) -> &Self
fn from_type_ref(this: &Self::Type) -> &Self
Converts a reference back to the original type.
source§fn from_type_mut(this: &mut Self::Type) -> &mut Self
fn from_type_mut(this: &mut Self::Type) -> &mut Self
Converts a mutable reference back to the original type.
source§fn from_type_box(this: Box<Self::Type>) -> Box<Self>
fn from_type_box(this: Box<Self::Type>) -> Box<Self>
Converts a box back to the original type.