From 2b3ef3ff371fb0d8631b7af213de48ea27ddc90a Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Wed, 22 Jan 2020 20:18:35 +0000 Subject: [PATCH] style: Use Serde for SVGOffsetPath. Differential Revision: https://phabricator.services.mozilla.com/D60087 --- components/style/values/generics/motion.rs | 3 +++ components/style/values/specified/svg_path.rs | 12 ++++++++++- components/style_traits/arc_slice.rs | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/components/style/values/generics/motion.rs b/components/style/values/generics/motion.rs index 685eaad43e2..25ba5873adc 100644 --- a/components/style/values/generics/motion.rs +++ b/components/style/values/generics/motion.rs @@ -73,13 +73,16 @@ pub struct RayFunction { /// The offset-path value. /// /// https://drafts.fxtf.org/motion-1/#offset-path-property +/// cbindgen:private-default-tagged-enum-constructor=false #[derive( Animate, Clone, ComputeSquaredDistance, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToAnimatedZero, ToComputedValue, diff --git a/components/style/values/specified/svg_path.rs b/components/style/values/specified/svg_path.rs index 9a94af6a82f..b5461bb37fc 100644 --- a/components/style/values/specified/svg_path.rs +++ b/components/style/values/specified/svg_path.rs @@ -21,8 +21,10 @@ use style_traits::{CssWriter, ParseError, StyleParseErrorKind, ToCss}; #[derive( Clone, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToAnimatedZero, ToComputedValue, @@ -156,8 +158,10 @@ impl ComputeSquaredDistance for SVGPathData { ComputeSquaredDistance, Copy, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToAnimatedZero, ToShmem, @@ -483,8 +487,10 @@ impl ToCss for PathCommand { ComputeSquaredDistance, Copy, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToAnimatedZero, ToShmem, @@ -511,8 +517,10 @@ impl IsAbsolute { ComputeSquaredDistance, Copy, Debug, + Deserialize, MallocSizeOf, PartialEq, + Serialize, SpecifiedValueInfo, ToAnimatedZero, ToCss, @@ -530,7 +538,9 @@ impl CoordPair { } /// The EllipticalArc flag type. -#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToShmem)] +#[derive( + Clone, Copy, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize, SpecifiedValueInfo, ToShmem, +)] #[repr(C)] pub struct ArcFlag(bool); diff --git a/components/style_traits/arc_slice.rs b/components/style_traits/arc_slice.rs index bbbac1a0757..f5d0c56e7fc 100644 --- a/components/style_traits/arc_slice.rs +++ b/components/style_traits/arc_slice.rs @@ -4,6 +4,8 @@ //! A thin atomically-reference-counted slice. +use serde::de::{Deserialize, Deserializer}; +use serde::ser::{Serialize, Serializer}; use servo_arc::ThinArc; use std::ops::Deref; use std::ptr::NonNull; @@ -60,6 +62,25 @@ impl Default for ArcSlice { } } +impl Serialize for ArcSlice { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + self.deref().serialize(serializer) + } +} + +impl<'de, T: Deserialize<'de>> Deserialize<'de> for ArcSlice { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let r = Vec::deserialize(deserializer)?; + Ok(ArcSlice::from_iter(r.into_iter())) + } +} + impl ArcSlice { /// Creates an Arc for a slice using the given iterator to generate the /// slice.