use core::fmt::Debug; use core::hint::unreachable_unchecked; /// Internal stable replacement for !. #[derive(Debug)] pub enum Never {} /// Returns if a is an older version than b, taking into account wrapping of /// versions. pub fn is_older_version(a: u32, b: u32) -> bool { let diff = a.wrapping_sub(b); diff >= (1 << 31) } /// An unwrapper that checks on debug, doesn't check on release. /// UB if unwrapped on release mode when unwrap would panic. pub trait UnwrapUnchecked { // Extra underscore because unwrap_unchecked is planned to be added to the stdlib. unsafe fn unwrap_unchecked_(self) -> T; } impl UnwrapUnchecked for Option { unsafe fn unwrap_unchecked_(self) -> T { if cfg!(debug_assertions) { self.unwrap() } else { match self { Some(x) => x, None => unreachable_unchecked(), } } } } impl UnwrapUnchecked for Result { unsafe fn unwrap_unchecked_(self) -> T { if cfg!(debug_assertions) { self.unwrap() } else { match self { Ok(x) => x, Err(_) => unreachable_unchecked(), } } } }