xref: /aosp_15_r20/external/cronet/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/cast.rs (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #[cfg(debug_assertions)]
2 use std::convert::TryInto;
3 
4 // TODO remove this, use try_into wher as_* is used
5 
6 pub trait Truncate {
truncate_as_u8(self) -> u87     fn truncate_as_u8(self) -> u8;
8 }
9 
10 impl Truncate for u16 {
11     #[allow(clippy::cast_possible_truncation)]
truncate_as_u8(self) -> u812     fn truncate_as_u8(self) -> u8 {
13         (self & 0xff) as u8
14     }
15 }
16 
17 pub trait As {
as_u16(self) -> u1618     fn as_u16(self) -> u16;
as_i16(self) -> i1619     fn as_i16(self) -> i16;
as_usize(self) -> usize20     fn as_usize(self) -> usize;
21 }
22 
23 macro_rules! impl_as {
24     ($ty:ty) => {
25         #[cfg(debug_assertions)]
26         impl As for $ty {
27             fn as_u16(self) -> u16 {
28                 self.try_into().unwrap()
29             }
30 
31             fn as_i16(self) -> i16 {
32                 self.try_into().unwrap()
33             }
34 
35             fn as_usize(self) -> usize {
36                 self.try_into().unwrap()
37             }
38         }
39 
40         #[cfg(not(debug_assertions))]
41         impl As for $ty {
42             fn as_u16(self) -> u16 {
43                 self as u16
44             }
45             fn as_i16(self) -> i16 {
46                 self as i16
47             }
48             fn as_usize(self) -> usize {
49                 self as usize
50             }
51         }
52     };
53 }
54 
55 impl_as!(i16);
56 impl_as!(u32);
57 impl_as!(usize);
58