Created
April 25, 2026 06:06
-
-
Save Yoplitein/f4fa4c18f591f4c225f33306f28296f3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| pub trait UnreachableUnwrapOption<Res> { | |
| fn unreachable_unwrap(self) -> Res; | |
| fn unreachable_expect(self, message: &str) -> Res; | |
| fn unreachable_expect_lazy(self, message: impl FnOnce() -> String) -> Res; | |
| } | |
| impl<Res> UnreachableUnwrapOption<Res> for Option<Res> { | |
| #[inline(always)] | |
| fn unreachable_unwrap(self) -> Res { | |
| let Some(res) = self else { unreachable!() }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect(self, message: &str) -> Res { | |
| let Some(res) = self else { | |
| unreachable!("{message}") | |
| }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect_lazy(self, message: impl FnOnce() -> String) -> Res { | |
| let Some(res) = self else { | |
| unreachable!("{}", message()) | |
| }; | |
| res | |
| } | |
| } | |
| pub trait UnreachableUnwrapResult<Res, Err> { | |
| fn unreachable_unwrap(self) -> Res; | |
| fn unreachable_expect(self, message: &str) -> Res; | |
| fn unreachable_expect_lazy(self, message: impl FnOnce(Err) -> String) -> Res; | |
| fn unreachable_unwrap_err(self) -> Err; | |
| fn unreachable_expect_err(self, message: &str) -> Err; | |
| fn unreachable_expect_err_lazy(self, message: impl FnOnce(Res) -> String) -> Err; | |
| } | |
| impl<Res, Err> UnreachableUnwrapResult<Res, Err> for Result<Res, Err> { | |
| #[inline(always)] | |
| fn unreachable_unwrap(self) -> Res { | |
| let Ok(res) = self else { unreachable!() }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect(self, message: &str) -> Res { | |
| let Ok(res) = self else { | |
| unreachable!("{message}") | |
| }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect_lazy(self, message: impl FnOnce(Err) -> String) -> Res { | |
| match self { | |
| Ok(res) => res, | |
| Err(err) => unreachable!("{}", message(err)), | |
| } | |
| } | |
| #[inline(always)] | |
| fn unreachable_unwrap_err(self) -> Err { | |
| let Err(res) = self else { unreachable!() }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect_err(self, message: &str) -> Err { | |
| let Err(res) = self else { | |
| unreachable!("{message}") | |
| }; | |
| res | |
| } | |
| #[inline(always)] | |
| fn unreachable_expect_err_lazy(self, message: impl FnOnce(Res) -> String) -> Err { | |
| match self { | |
| Ok(res) => unreachable!("{}", message(res)), | |
| Err(err) => err, | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment