1 #[derive(Debug, Clone, PartialEq)] 2 pub enum UnionInUnion { 3 First(crate::mangled::_7_android_4_aidl_5_tests_6_unions_9_EnumUnion), 4 Second(i32), 5 } 6 pub(crate) mod mangled { pub use super::UnionInUnion as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion; } 7 impl Default for UnionInUnion { default() -> Self8 fn default() -> Self { 9 Self::First(Default::default()) 10 } 11 } 12 impl binder::parcel::Serialize for UnionInUnion { serialize(&self, parcel: &mut binder::parcel::Parcel) -> binder::Result<()>13 fn serialize(&self, parcel: &mut binder::parcel::Parcel) -> binder::Result<()> { 14 <Self as binder::parcel::SerializeOption>::serialize_option(Some(self), parcel) 15 } 16 } 17 impl binder::parcel::SerializeArray for UnionInUnion {} 18 impl binder::parcel::SerializeOption for UnionInUnion { serialize_option(this: Option<&Self>, parcel: &mut binder::parcel::Parcel) -> binder::Result<()>19 fn serialize_option(this: Option<&Self>, parcel: &mut binder::parcel::Parcel) -> binder::Result<()> { 20 let this = if let Some(this) = this { 21 parcel.write(&1i32)?; 22 this 23 } else { 24 return parcel.write(&0i32); 25 }; 26 match this { 27 Self::First(v) => { 28 parcel.write(&0i32)?; 29 parcel.write(v) 30 } 31 Self::Second(v) => { 32 parcel.write(&1i32)?; 33 parcel.write(v) 34 } 35 } 36 } 37 } 38 impl binder::parcel::Deserialize for UnionInUnion { deserialize(parcel: &binder::parcel::Parcel) -> binder::Result<Self>39 fn deserialize(parcel: &binder::parcel::Parcel) -> binder::Result<Self> { 40 <Self as binder::parcel::DeserializeOption>::deserialize_option(parcel) 41 .transpose() 42 .unwrap_or(Err(binder::StatusCode::UNEXPECTED_NULL)) 43 } 44 } 45 impl binder::parcel::DeserializeArray for UnionInUnion {} 46 impl binder::parcel::DeserializeOption for UnionInUnion { deserialize_option(parcel: &binder::parcel::Parcel) -> binder::Result<Option<Self>>47 fn deserialize_option(parcel: &binder::parcel::Parcel) -> binder::Result<Option<Self>> { 48 let status: i32 = parcel.read()?; 49 if status == 0 { return Ok(None); } 50 let tag: i32 = parcel.read()?; 51 match tag { 52 0 => { 53 let value: crate::mangled::_7_android_4_aidl_5_tests_6_unions_9_EnumUnion = parcel.read()?; 54 Ok(Some(Self::First(value))) 55 } 56 1 => { 57 let value: i32 = parcel.read()?; 58 Ok(Some(Self::Second(value))) 59 } 60 _ => { 61 Err(binder::StatusCode::BAD_VALUE) 62 } 63 } 64 } 65 } 66