From 5ac08e47808fd3237d5a352151b5393819634de5 Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Wed, 22 Jan 2020 20:20:38 +0000 Subject: [PATCH] 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 --- components/style/values/generics/transform.rs | 8 +++++++ components/style_traits/owned_slice.rs | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/components/style/values/generics/transform.rs b/components/style/values/generics/transform.rs index d452b215c6a..42a5197311f 100644 --- a/components/style/values/generics/transform.rs +++ b/components/style/values/generics/transform.rs @@ -23,8 +23,10 @@ use style_traits::{CssWriter, ToCss}; Clone, Copy, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToComputedValue, ToCss, @@ -51,8 +53,10 @@ pub use self::GenericMatrix as Matrix; Clone, Copy, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToComputedValue, ToCss, @@ -141,8 +145,10 @@ fn is_same(x: &N, y: &N) -> bool { #[derive( Clone, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToComputedValue, ToCss, @@ -267,8 +273,10 @@ pub use self::GenericTransformOperation as TransformOperation; #[derive( Clone, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToComputedValue, ToCss, diff --git a/components/style_traits/owned_slice.rs b/components/style_traits/owned_slice.rs index 33d3ac1c2ab..bbce7065196 100644 --- a/components/style_traits/owned_slice.rs +++ b/components/style_traits/owned_slice.rs @@ -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 iter::FromIterator for OwnedSlice { Vec::from_iter(iter).into() } } + +impl Serialize for OwnedSlice { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + self.deref().serialize(serializer) + } +} + +impl<'de, T: Deserialize<'de>> Deserialize<'de> for OwnedSlice { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let r = Box::<[T]>::deserialize(deserializer)?; + Ok(r.into()) + } +}