1#[allow(unused_imports)]
2use crate as defmt;
3use crate::{Format, Formatter, Str};
4
5pub trait Truncate<U> {
6 fn truncate(self) -> U;
7}
8
9macro_rules! impl_truncate {
10 ($($from:ty => $into:ty),*) => {
11 $(impl Truncate<$into> for $from {
12 fn truncate(self) -> $into {
13 self as $into
14 }
15 })*
16 };
17}
18
19impl_truncate!(
22 u8 => u8,
23 u16 => u8,
24 u32 => u8,
25 u64 => u8,
26 u128 => u8,
27 u16 => u16,
28 u32 => u16,
29 u64 => u16,
30 u128 => u16,
31 u32 => u32,
32 u64 => u32,
33 u128 => u32,
34 u64 => u64,
35 u128 => u64,
36 u128 => u128
37);
38
39#[derive(Debug, Copy, Clone, Eq, PartialEq)]
40pub struct NoneError;
41
42impl Format for NoneError {
43 fn format(&self, _fmt: Formatter) {
44 unreachable!();
45 }
46
47 fn _format_tag() -> Str {
48 defmt_macros::internp!("Unwrap of a None option value")
49 }
50
51 fn _format_data(&self) {}
52}
53
54pub trait IntoResult {
59 type Ok;
60 type Error;
61 fn into_result(self) -> Result<Self::Ok, Self::Error>;
62}
63
64impl<T> IntoResult for Option<T> {
65 type Ok = T;
66 type Error = NoneError;
67
68 #[inline]
69 fn into_result(self) -> Result<T, NoneError> {
70 self.ok_or(NoneError)
71 }
72}
73
74impl<T, E> IntoResult for Result<T, E> {
75 type Ok = T;
76 type Error = E;
77
78 #[inline]
79 fn into_result(self) -> Self {
80 self
81 }
82}