Enum sel4_microkit::Infallible
1.34.0 · pub enum Infallible {}
Expand description
The error type for errors that can never happen.
Since this enum has no variant, a value of this type can never actually exist.
This can be useful for generic APIs that use [Result
] and parameterize the error type,
to indicate that the result is always [Ok
].
For example, the [TryFrom
] trait (conversion that returns a [Result
])
has a blanket implementation for all types where a reverse [Into
] implementation exists.
impl<T, U> TryFrom<U> for T where U: Into<T> {
type Error = Infallible;
fn try_from(value: U) -> Result<Self, Infallible> {
Ok(U::into(value)) // Never returns `Err`
}
}
§Future compatibility
This enum has the same role as [the !
“never” type][never],
which is unstable in this version of Rust.
When !
is stabilized, we plan to make Infallible
a type alias to it:
pub type Infallible = !;
… and eventually deprecate Infallible
.
However there is one case where !
syntax can be used
before !
is stabilized as a full-fledged type: in the position of a function’s return type.
Specifically, it is possible to have implementations for two different function pointer types:
trait MyTrait {}
impl MyTrait for fn() -> ! {}
impl MyTrait for fn() -> std::convert::Infallible {}
With Infallible
being an enum, this code is valid.
However when Infallible
becomes an alias for the never type,
the two impl
s will start to overlap
and therefore will be disallowed by the language’s trait coherence rules.
Trait Implementations§
1.34.0§impl Clone for Infallible
impl Clone for Infallible
§fn clone(&self) -> Infallible
fn clone(&self) -> Infallible
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more1.34.0§impl Debug for Infallible
impl Debug for Infallible
1.34.0§impl Display for Infallible
impl Display for Infallible
1.8.0§impl Error for Infallible
impl Error for Infallible
§fn description(&self) -> &str
fn description(&self) -> &str
1.30.0§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.34.0§impl From<!> for Infallible
impl From<!> for Infallible
§fn from(x: !) -> Infallible
fn from(x: !) -> Infallible
1.44.0§impl Hash for Infallible
impl Hash for Infallible
1.34.0§impl Ord for Infallible
impl Ord for Infallible
1.34.0§impl PartialEq for Infallible
impl PartialEq for Infallible
§fn eq(&self, _: &Infallible) -> bool
fn eq(&self, _: &Infallible) -> bool
self
and other
values to be equal, and is used
by ==
.1.34.0§impl PartialOrd for Infallible
impl PartialOrd for Infallible
§fn partial_cmp(&self, _other: &Infallible) -> Option<Ordering>
fn partial_cmp(&self, _other: &Infallible) -> Option<Ordering>
1.0.0§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more