diff options
| author | 2023-03-13 23:46:42 +0000 | |
|---|---|---|
| committer | 2023-03-13 23:46:42 +0000 | |
| commit | 88bdffea93fec32360102452fa867b22e970fa5e (patch) | |
| tree | 3eeb420767c455956249e8eeef16b1b61594691f | |
| parent | ddae51e1c3876d53a8db25f43166f9a8e368bd11 (diff) | |
rust: Add support for parameterized types
The existing impl_ser/de macros did not work on types with type
parameters. This adds rudimentary support for type parameters while
continuing to support parameterless invocation.
Bug: 168138645
Test: mma in aidl
Change-Id: I8ee4ea4ff49215e15c0e035c72215a36dcc07637
| -rw-r--r-- | libs/binder/rust/src/parcel/parcelable.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/libs/binder/rust/src/parcel/parcelable.rs b/libs/binder/rust/src/parcel/parcelable.rs index 6f4c37530f..4b658fc74d 100644 --- a/libs/binder/rust/src/parcel/parcelable.rs +++ b/libs/binder/rust/src/parcel/parcelable.rs @@ -771,7 +771,13 @@ impl<T: DeserializeOption> Deserialize for Option<T> { #[macro_export] macro_rules! impl_serialize_for_parcelable { ($parcelable:ident) => { - impl $crate::binder_impl::Serialize for $parcelable { + $crate::impl_serialize_for_parcelable!($parcelable < >); + }; + ($parcelable:ident < $( $param:ident ),* , >) => { + $crate::impl_serialize_for_parcelable!($parcelable < $($param),* >); + }; + ($parcelable:ident < $( $param:ident ),* > ) => { + impl < $($param),* > $crate::binder_impl::Serialize for $parcelable < $($param),* > { fn serialize( &self, parcel: &mut $crate::binder_impl::BorrowedParcel<'_>, @@ -780,9 +786,9 @@ macro_rules! impl_serialize_for_parcelable { } } - impl $crate::binder_impl::SerializeArray for $parcelable {} + impl < $($param),* > $crate::binder_impl::SerializeArray for $parcelable < $($param),* > {} - impl $crate::binder_impl::SerializeOption for $parcelable { + impl < $($param),* > $crate::binder_impl::SerializeOption for $parcelable < $($param),* > { fn serialize_option( this: Option<&Self>, parcel: &mut $crate::binder_impl::BorrowedParcel<'_>, @@ -808,7 +814,13 @@ macro_rules! impl_serialize_for_parcelable { #[macro_export] macro_rules! impl_deserialize_for_parcelable { ($parcelable:ident) => { - impl $crate::binder_impl::Deserialize for $parcelable { + $crate::impl_deserialize_for_parcelable!($parcelable < >); + }; + ($parcelable:ident < $( $param:ident ),* , >) => { + $crate::impl_deserialize_for_parcelable!($parcelable < $($param),* >); + }; + ($parcelable:ident < $( $param:ident ),* > ) => { + impl < $($param: Default),* > $crate::binder_impl::Deserialize for $parcelable < $($param),* > { fn deserialize( parcel: &$crate::binder_impl::BorrowedParcel<'_>, ) -> std::result::Result<Self, $crate::StatusCode> { @@ -830,9 +842,9 @@ macro_rules! impl_deserialize_for_parcelable { } } - impl $crate::binder_impl::DeserializeArray for $parcelable {} + impl < $($param: Default),* > $crate::binder_impl::DeserializeArray for $parcelable < $($param),* > {} - impl $crate::binder_impl::DeserializeOption for $parcelable { + impl < $($param: Default),* > $crate::binder_impl::DeserializeOption for $parcelable < $($param),* > { fn deserialize_option( parcel: &$crate::binder_impl::BorrowedParcel<'_>, ) -> std::result::Result<Option<Self>, $crate::StatusCode> { |