From fd9a8a3685235b045614689f2e24a58a682f6414 Mon Sep 17 00:00:00 2001 From: Enrico Lumetti Date: Mon, 4 Oct 2021 18:45:47 +0200 Subject: [PATCH] Fix serde --- src/canvas.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/canvas.rs b/src/canvas.rs index b33abe3..8e7fdbb 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -16,6 +16,7 @@ use std::vec::Vec; +use druid::Color; use im::{vector, Vector}; use serde::de::{Deserializer, SeqAccess, Visitor}; @@ -27,12 +28,6 @@ pub struct Path { pub kurbo_path: druid::kurbo::BezPath, } -#[derive(Serialize, Deserialize)] -#[serde(remote = "druid::Color")] -enum ColorDef { - Rgba32(u32), -} - struct Interval { start_pos: f64, end_pos: f64, @@ -86,11 +81,24 @@ pub enum CanvasElement { Freehand { path: Path, thickness: f64, - #[serde(with = "ColorDef")] + #[serde(serialize_with = "serialize_color", deserialize_with = "deserialize_color")] stroke_color: druid::Color, }, } +fn serialize_color(c: &druid::Color, ser: S) -> Result + where S: Serializer +{ + ser.serialize_u32(c.as_rgba_u32()) +} + +fn deserialize_color<'de, D>(de: D) -> Result + where D: Deserializer<'de> +{ + let c = u32::deserialize(de)?; + Ok(druid::Color::from_rgba32_u32(c)) +} + impl CanvasElement { pub fn bounding_box(&self) -> druid::Rect { match self {