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,
which is unstable in this version of Rust.
When ! is stabilized, we plan to make Infallible a type alias to it:
โฆ 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:
With Infallible being an enum, this code is valid.
However when Infallible becomes an alias for the never type,
the two impls will start to overlap
and therefore will be disallowed by the languageโs trait coherence rules.
Trait Implementationsยง
1.34.0 (const: unstable) ยท Sourceยงimpl Clone for Infallible
impl Clone for Infallible
Sourceยงfn clone(&self) -> Infallible
fn clone(&self) -> Infallible
1.0.0 (const: unstable) ยท Sourceยงfn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for Infallible
1.34.0 ยท Sourceยงimpl Debug for Infallible
impl Debug for Infallible
1.34.0 ยท Sourceยงimpl Display for Infallible
impl Display for Infallible
impl Eq for Infallible
1.8.0 ยท Sourceยงimpl Error for Infallible
impl Error for Infallible
1.30.0 ยท Sourceยงfn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 ยท Sourceยงfn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()