style: Use Serde for Transform.

Though this may make us use more space when serializing
StyleTransform, but we don't have to do extra conversion on the compostior
side, and this makes us easier to maintain the Rust type.

Differential Revision: https://phabricator.services.mozilla.com/D60045
This commit is contained in:
Boris Chiou 2020-01-22 20:20:38 +00:00 committed by Emilio Cobos Álvarez
parent 238e9ca2fb
commit 5ac08e4780
No known key found for this signature in database
GPG key ID: E1152D0994E4BF8A
2 changed files with 29 additions and 0 deletions

View file

@ -7,6 +7,8 @@
//! A replacement for `Box<[T]>` that cbindgen can understand.
use malloc_size_of::{MallocShallowSizeOf, MallocSizeOf, MallocSizeOfOps};
use serde::de::{Deserialize, Deserializer};
use serde::ser::{Serialize, Serializer};
use std::marker::PhantomData;
use std::ops::{Deref, DerefMut};
use std::ptr::NonNull;
@ -171,3 +173,22 @@ impl<T> iter::FromIterator<T> for OwnedSlice<T> {
Vec::from_iter(iter).into()
}
}
impl<T: Serialize> Serialize for OwnedSlice<T> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
self.deref().serialize(serializer)
}
}
impl<'de, T: Deserialize<'de>> Deserialize<'de> for OwnedSlice<T> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let r = Box::<[T]>::deserialize(deserializer)?;
Ok(r.into())
}
}