Skip to content

Commit 496ce0b

Browse files
committed
Don't use hacky Option<T> impl for serializing "none".
1 parent e91919c commit 496ce0b

File tree

1 file changed

+16
-21
lines changed

1 file changed

+16
-21
lines changed

src/color.rs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,13 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
1313

1414
const OPAQUE: f32 = 1.0;
1515

16-
// This impl should only live in this module and should not be `pub`. We don't
17-
// want any other Option<T> to serialize to "none".
18-
impl<'a, T: ToCss> ToCss for Option<T> {
19-
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
20-
where
21-
W: fmt::Write,
22-
{
23-
if let Some(v) = self {
24-
ToCss::to_css(v, dest)
25-
} else {
26-
dest.write_str("none")
27-
}
16+
fn serialize_none_or<T>(dest: &mut impl fmt::Write, value: &Option<T>) -> fmt::Result
17+
where
18+
T: ToCss,
19+
{
20+
match value {
21+
Some(v) => v.to_css(dest),
22+
None => dest.write_str("none"),
2823
}
2924
}
3025

@@ -415,11 +410,11 @@ macro_rules! impl_lab_like {
415410
{
416411
dest.write_str($fname)?;
417412
dest.write_str("(")?;
418-
self.lightness.to_css(dest)?;
413+
serialize_none_or(dest, &self.lightness)?;
419414
dest.write_char(' ')?;
420-
self.a.to_css(dest)?;
415+
serialize_none_or(dest, &self.a)?;
421416
dest.write_char(' ')?;
422-
self.b.to_css(dest)?;
417+
serialize_none_or(dest, &self.b)?;
423418
serialize_alpha(dest, self.alpha, false)?;
424419
dest.write_char(')')
425420
}
@@ -508,11 +503,11 @@ macro_rules! impl_lch_like {
508503
{
509504
dest.write_str($fname)?;
510505
dest.write_str("(")?;
511-
self.lightness.to_css(dest)?;
506+
serialize_none_or(dest, &self.lightness)?;
512507
dest.write_char(' ')?;
513-
self.chroma.to_css(dest)?;
508+
serialize_none_or(dest, &self.chroma)?;
514509
dest.write_char(' ')?;
515-
self.hue.to_css(dest)?;
510+
serialize_none_or(dest, &self.hue)?;
516511
serialize_alpha(dest, self.alpha, false)?;
517512
dest.write_char(')')
518513
}
@@ -633,11 +628,11 @@ impl ToCss for ColorFunction {
633628
dest.write_str("color(")?;
634629
self.color_space.to_css(dest)?;
635630
dest.write_char(' ')?;
636-
self.c1.to_css(dest)?;
631+
serialize_none_or(dest, &self.c1)?;
637632
dest.write_char(' ')?;
638-
self.c2.to_css(dest)?;
633+
serialize_none_or(dest, &self.c2)?;
639634
dest.write_char(' ')?;
640-
self.c3.to_css(dest)?;
635+
serialize_none_or(dest, &self.c3)?;
641636

642637
serialize_alpha(dest, self.alpha, false)?;
643638

0 commit comments

Comments
 (0)