From 8a981efd1dcc892b22068a1214cc7b6c2a4e5fee Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 23 Apr 2021 03:34:11 +0800 Subject: [PATCH] Use fold instead of join in PolyLine rendering (#83) * Use fold instead of join in PolyLine rendering * Add test --- core/document/src/layers/polyline.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/core/document/src/layers/polyline.rs b/core/document/src/layers/polyline.rs index fc67af88..ffb01198 100644 --- a/core/document/src/layers/polyline.rs +++ b/core/document/src/layers/polyline.rs @@ -1,6 +1,8 @@ use super::style; use super::LayerData; +use std::fmt::Write; + #[derive(Debug, Clone, PartialEq)] pub struct PolyLine { points: Vec, @@ -18,7 +20,23 @@ impl PolyLine { impl LayerData for PolyLine { fn render(&self) -> String { - let points = self.points.iter().map(|p| format!("{},{}", p.x, p.y)).collect::>().join(" "); - format!(r#""#, points, self.style.render()) + if self.points.is_empty() { + return String::new(); + } + let points = self.points.iter().fold(String::new(), |mut acc, p| { + let _ = write!(&mut acc, " {:.3} {:.3}", p.x, p.y); + acc + }); + format!(r#""#, &points[1..], self.style.render()) } } + +#[test] +fn polyline_should_render() { + let polyline = PolyLine { + points: vec![kurbo::Point::new(3.0, 4.12354), kurbo::Point::new(1.0, 5.54)], + style: style::PathStyle::new(Some(style::Stroke::new(crate::color::Color::GREEN, 0.4)), None), + }; + + assert_eq!(r#""#, polyline.render()); +}