Enum Infallible
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>
impl Copy for Infallible
impl Eq for Infallible
Auto Trait Implementations§
impl Freeze for Infallible
impl RefUnwindSafe for Infallible
impl Send for Infallible
impl Sync for Infallible
impl Unpin for Infallible
impl UnwindSafe for Infallible
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)