winresult_types/
unions.rs1use crate::*;
2use core::convert::Infallible;
3
4
5
6#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(transparent)] pub struct ErrorHResultOrCode(pub(crate) u32);
9
10impl ErrorHResultOrCode {
11 pub const fn to_u32(self) -> u32 { self.0 }
16 pub const fn to_code(self) -> Option<ErrorCode> { if self.0 <= 0xFFFF { Some(ErrorCode(self.0 as _)) } else { None } }
17 pub const fn to_hresult(self) -> Option<HResultError> { if 0x8000_0000 <= self.0 { Some(HResultError(self.0)) } else { None } }
18}
19
20impl From<ErrorHResultOrCode> for u32 { fn from(v: ErrorHResultOrCode) -> Self { v.0 } }
21impl From<ErrorCode > for ErrorHResultOrCode { fn from(v: ErrorCode ) -> Self { Self(v.0.into()) } }
22impl From<HResultError > for ErrorHResultOrCode { fn from(v: HResultError ) -> Self { Self(v.0) } }
23impl From<Infallible > for ErrorHResultOrCode { fn from(i: Infallible ) -> Self { match i {} } }
24
25impl From<u32 > for ErrorHResultOrCode { fn from(v: u32 ) -> Self { Self(v) } }
27impl From<i32 > for ErrorHResultOrCode { fn from(v: i32 ) -> Self { Self(v as _) } }
28
29
30
31macro_rules! compare { ($($a:ident == $z:ident),* $(,)?) => {$(
32 impl PartialEq<$a> for $z { fn eq(&self, other: &$a) -> bool { ErrorHResultOrCode::from(*self).0 == ErrorHResultOrCode::from(*other).0 } }
33 impl PartialEq<$z> for $a { fn eq(&self, other: &$z) -> bool { ErrorHResultOrCode::from(*self).0 == ErrorHResultOrCode::from(*other).0 } }
34)*}}
35
36compare! {
37 ErrorHResultOrCode == ErrorCode,
38 ErrorHResultOrCode == HResultError,
39 ErrorHResultOrCode == u32,
40 ErrorHResultOrCode == i32, }
42
43impl<O, E: PartialEq<ErrorHResultOrCode>> PartialEq<ErrorHResultOrCode> for Result<O, E> {
44 fn eq(&self, other: &ErrorHResultOrCode) -> bool {
45 match self.as_ref() {
46 Ok(_) => false,
47 Err(e) => *e == *other,
48 }
49 }
50}
51
52impl<O, E: PartialEq<ErrorHResultOrCode>> PartialEq<Result<O, E>> for ErrorHResultOrCode {
53 fn eq(&self, other: &Result<O, E>) -> bool {
54 match other.as_ref() {
55 Ok(_) => false,
56 Err(e) => *e == *self,
57 }
58 }
59}