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 {