summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jooyung Han <jooyung@google.com> 2021-10-16 03:39:59 +0900
committer Jooyung Han <jooyung@google.com> 2021-10-16 03:39:59 +0900
commit7dcc56f291be627ddc84c8f5aac0f158342e4529 (patch)
tree483100f34a11f7226c9f6503258db3be9ad05a65
parent9e0b56a2cddba12457699f5d8baaeb97292c6b71 (diff)
libbinder_rs: (De)SerializeArray for Option<T>
To support read/write nullable array of parcelables, for T:(De)SerializeOption, provide (De)SerializeArray as well. Bug: n/a Test: aidl_integration_test Change-Id: I8c7e6de79a92fa9868335202837d14b138cdeb6d
-rw-r--r--libs/binder/rust/src/parcel/file_descriptor.rs4
-rw-r--r--libs/binder/rust/src/parcel/parcelable.rs7
-rw-r--r--libs/binder/rust/src/proxy.rs3
3 files changed, 3 insertions, 11 deletions
diff --git a/libs/binder/rust/src/parcel/file_descriptor.rs b/libs/binder/rust/src/parcel/file_descriptor.rs
index f71a686959..8bcc5d0092 100644
--- a/libs/binder/rust/src/parcel/file_descriptor.rs
+++ b/libs/binder/rust/src/parcel/file_descriptor.rs
@@ -94,8 +94,6 @@ impl SerializeOption for ParcelFileDescriptor {
}
}
-impl SerializeArray for Option<ParcelFileDescriptor> {}
-
impl DeserializeOption for ParcelFileDescriptor {
fn deserialize_option(parcel: &Parcel) -> Result<Option<Self>> {
let mut fd = -1i32;
@@ -126,8 +124,6 @@ impl DeserializeOption for ParcelFileDescriptor {
}
}
-impl DeserializeArray for Option<ParcelFileDescriptor> {}
-
impl Deserialize for ParcelFileDescriptor {
fn deserialize(parcel: &Parcel) -> Result<Self> {
Deserialize::deserialize(parcel)
diff --git a/libs/binder/rust/src/parcel/parcelable.rs b/libs/binder/rust/src/parcel/parcelable.rs
index 499ef09e6a..ec00e1dc86 100644
--- a/libs/binder/rust/src/parcel/parcelable.rs
+++ b/libs/binder/rust/src/parcel/parcelable.rs
@@ -383,6 +383,9 @@ macro_rules! impl_parcelable {
};
}
+impl<T: DeserializeOption> DeserializeArray for Option<T> {}
+impl<T: SerializeOption> SerializeArray for Option<T> {}
+
parcelable_primitives! {
impl Serialize for bool = sys::AParcel_writeBool;
impl Deserialize for bool = sys::AParcel_readBool;
@@ -537,8 +540,6 @@ impl SerializeOption for str {
}
}
-impl SerializeArray for Option<&str> {}
-
impl Serialize for str {
fn serialize(&self, parcel: &mut Parcel) -> Result<()> {
Some(self).serialize(parcel)
@@ -561,8 +562,6 @@ impl SerializeOption for String {
}
}
-impl SerializeArray for Option<String> {}
-
impl Deserialize for Option<String> {
fn deserialize(parcel: &Parcel) -> Result<Self> {
let mut vec: Option<Vec<u8>> = None;
diff --git a/libs/binder/rust/src/proxy.rs b/libs/binder/rust/src/proxy.rs
index 6a4af077c5..2c5b0a8421 100644
--- a/libs/binder/rust/src/proxy.rs
+++ b/libs/binder/rust/src/proxy.rs
@@ -429,8 +429,6 @@ impl SerializeOption for SpIBinder {
}
impl SerializeArray for SpIBinder {}
-impl SerializeArray for Option<&SpIBinder> {}
-impl SerializeArray for Option<SpIBinder> {}
impl Deserialize for SpIBinder {
fn deserialize(parcel: &Parcel) -> Result<SpIBinder> {
@@ -448,7 +446,6 @@ impl DeserializeOption for SpIBinder {
}
impl DeserializeArray for SpIBinder {}
-impl DeserializeArray for Option<SpIBinder> {}
/// A weak reference to a Binder remote object.
///