1 #[derive(Debug, Clone, PartialEq)] 2 pub enum Union { 3 Ns(Vec<i32>), 4 N(i32), 5 M(i32), 6 S(String), 7 Ibinder(Option<binder::SpIBinder>), 8 Ss(Vec<String>), 9 Be(crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum), 10 } 11 pub const S1: &str = "a string constant in union"; 12 pub(crate) mod mangled { pub use super::Union as _7_android_4_aidl_5_tests_5_Union; } 13 impl Default for Union { default() -> Self14 fn default() -> Self { 15 Self::Ns(vec!{}) 16 } 17 } 18 impl binder::parcel::Serialize for Union { serialize(&self, parcel: &mut binder::parcel::Parcel) -> binder::Result<()>19 fn serialize(&self, parcel: &mut binder::parcel::Parcel) -> binder::Result<()> { 20 <Self as binder::parcel::SerializeOption>::serialize_option(Some(self), parcel) 21 } 22 } 23 impl binder::parcel::SerializeArray for Union {} 24 impl binder::parcel::SerializeOption for Union { serialize_option(this: Option<&Self>, parcel: &mut binder::parcel::Parcel) -> binder::Result<()>25 fn serialize_option(this: Option<&Self>, parcel: &mut binder::parcel::Parcel) -> binder::Result<()> { 26 let this = if let Some(this) = this { 27 parcel.write(&1i32)?; 28 this 29 } else { 30 return parcel.write(&0i32); 31 }; 32 match this { 33 Self::Ns(v) => { 34 parcel.write(&0i32)?; 35 parcel.write(v) 36 } 37 Self::N(v) => { 38 parcel.write(&1i32)?; 39 parcel.write(v) 40 } 41 Self::M(v) => { 42 parcel.write(&2i32)?; 43 parcel.write(v) 44 } 45 Self::S(v) => { 46 parcel.write(&3i32)?; 47 parcel.write(v) 48 } 49 Self::Ibinder(v) => { 50 parcel.write(&4i32)?; 51 parcel.write(v) 52 } 53 Self::Ss(v) => { 54 parcel.write(&5i32)?; 55 parcel.write(v) 56 } 57 Self::Be(v) => { 58 parcel.write(&6i32)?; 59 parcel.write(v) 60 } 61 } 62 } 63 } 64 impl binder::parcel::Deserialize for Union { deserialize(parcel: &binder::parcel::Parcel) -> binder::Result<Self>65 fn deserialize(parcel: &binder::parcel::Parcel) -> binder::Result<Self> { 66 <Self as binder::parcel::DeserializeOption>::deserialize_option(parcel) 67 .transpose() 68 .unwrap_or(Err(binder::StatusCode::UNEXPECTED_NULL)) 69 } 70 } 71 impl binder::parcel::DeserializeArray for Union {} 72 impl binder::parcel::DeserializeOption for Union { deserialize_option(parcel: &binder::parcel::Parcel) -> binder::Result<Option<Self>>73 fn deserialize_option(parcel: &binder::parcel::Parcel) -> binder::Result<Option<Self>> { 74 let status: i32 = parcel.read()?; 75 if status == 0 { return Ok(None); } 76 let tag: i32 = parcel.read()?; 77 match tag { 78 0 => { 79 let value: Vec<i32> = parcel.read()?; 80 Ok(Some(Self::Ns(value))) 81 } 82 1 => { 83 let value: i32 = parcel.read()?; 84 Ok(Some(Self::N(value))) 85 } 86 2 => { 87 let value: i32 = parcel.read()?; 88 Ok(Some(Self::M(value))) 89 } 90 3 => { 91 let value: String = parcel.read()?; 92 Ok(Some(Self::S(value))) 93 } 94 4 => { 95 let value: Option<binder::SpIBinder> = parcel.read()?; 96 Ok(Some(Self::Ibinder(value))) 97 } 98 5 => { 99 let value: Vec<String> = parcel.read()?; 100 Ok(Some(Self::Ss(value))) 101 } 102 6 => { 103 let value: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum = parcel.read()?; 104 Ok(Some(Self::Be(value))) 105 } 106 _ => { 107 Err(binder::StatusCode::BAD_VALUE) 108 } 109 } 110 } 111 } 112