Skip to content

Commit e380138

Browse files
committed
add deserialize to NamedColor, Rgb, Rgba
Fixes #264 Signed-off-by: Andrei Gherghescu <[email protected]>
1 parent cf8a787 commit e380138

File tree

1 file changed

+157
-5
lines changed

1 file changed

+157
-5
lines changed

plotly/src/common/color.rs

Lines changed: 157 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
/// [`predefined colors`]: <https://www.w3schools.com/cssref/css_colors.asp>
2020
use dyn_clone::DynClone;
2121
use erased_serde::Serialize as ErasedSerialize;
22-
use serde::Serialize;
22+
use serde::{Deserialize, Serialize};
2323

2424
/// A marker trait allowing several ways to describe a color.
2525
pub trait Color: DynClone + ErasedSerialize + Send + Sync + std::fmt::Debug + 'static {}
@@ -61,7 +61,7 @@ impl<C: Color> Into<Vec<Box<dyn Color>>> for ColorArray<C> {
6161

6262
/// A type-safe way of constructing a valid RGB color from constituent R, G and
6363
/// B channels.
64-
#[derive(Debug, Clone, Copy)]
64+
#[derive(Debug, Clone, Copy, Deserialize)]
6565
pub struct Rgb {
6666
pub(crate) r: u8,
6767
pub(crate) g: u8,
@@ -86,7 +86,7 @@ impl Serialize for Rgb {
8686

8787
/// A type-safe way of constructing a valid RGBA color from constituent R, G, B
8888
/// and A channels.
89-
#[derive(Debug, Clone, Copy)]
89+
#[derive(Debug, Clone, Copy, Deserialize)]
9090
pub struct Rgba {
9191
pub(crate) r: u8,
9292
pub(crate) g: u8,
@@ -116,7 +116,7 @@ impl Serialize for Rgba {
116116
/// Cross-browser compatible [`predefined colors`].
117117
///
118118
/// [`predefined colors`]: <https://www.w3schools.com/cssref/css_colors.asp>
119-
#[derive(Debug, Clone, Copy, Serialize)]
119+
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
120120
#[serde(rename_all = "lowercase")]
121121
pub enum NamedColor {
122122
AliceBlue,
@@ -272,7 +272,7 @@ pub enum NamedColor {
272272

273273
#[cfg(test)]
274274
mod tests {
275-
use serde_json::{json, to_value};
275+
use serde_json::{from_str, from_value, json, to_value};
276276

277277
use super::*;
278278

@@ -464,4 +464,156 @@ mod tests {
464464
assert_eq!(to_value(NamedColor::YellowGreen).unwrap(), json!("yellowgreen"));
465465
assert_eq!(to_value(NamedColor::Transparent).unwrap(), json!("transparent"));
466466
}
467+
468+
#[test]
469+
#[rustfmt::skip]
470+
fn test_deserialize_named_color() {
471+
// assert_eq!(from_str::<NamedColor>("aliceblue").unwrap(), NamedColor::AliceBlue);
472+
assert_eq!(from_value::<NamedColor>(json!("aliceblue")).unwrap(), NamedColor::AliceBlue);
473+
assert_eq!(from_value::<NamedColor>(json!("antiquewhite")).unwrap(),NamedColor::AntiqueWhite);
474+
assert_eq!(from_value::<NamedColor>(json!("aqua")).unwrap(),NamedColor::Aqua);
475+
assert_eq!(from_value::<NamedColor>(json!("aquamarine")).unwrap(),NamedColor::Aquamarine);
476+
assert_eq!(from_value::<NamedColor>(json!("azure")).unwrap(),NamedColor::Azure);
477+
assert_eq!(from_value::<NamedColor>(json!("beige")).unwrap(),NamedColor::Beige);
478+
assert_eq!(from_value::<NamedColor>(json!("bisque")).unwrap(),NamedColor::Bisque);
479+
assert_eq!(from_value::<NamedColor>(json!("black")).unwrap(),NamedColor::Black);
480+
assert_eq!(from_value::<NamedColor>(json!("blanchedalmond")).unwrap(),NamedColor::BlanchedAlmond);
481+
assert_eq!(from_value::<NamedColor>(json!("blue")).unwrap(),NamedColor::Blue);
482+
assert_eq!(from_value::<NamedColor>(json!("blueviolet")).unwrap(),NamedColor::BlueViolet);
483+
assert_eq!(from_value::<NamedColor>(json!("brown")).unwrap(),NamedColor::Brown);
484+
assert_eq!(from_value::<NamedColor>(json!("burlywood")).unwrap(),NamedColor::BurlyWood);
485+
assert_eq!(from_value::<NamedColor>(json!("cadetblue")).unwrap(),NamedColor::CadetBlue);
486+
assert_eq!(from_value::<NamedColor>(json!("chartreuse")).unwrap(),NamedColor::Chartreuse);
487+
assert_eq!(from_value::<NamedColor>(json!("chocolate")).unwrap(),NamedColor::Chocolate);
488+
assert_eq!(from_value::<NamedColor>(json!("coral")).unwrap(),NamedColor::Coral);
489+
assert_eq!(from_value::<NamedColor>(json!("cornflowerblue")).unwrap(),NamedColor::CornflowerBlue);
490+
assert_eq!(from_value::<NamedColor>(json!("cornsilk")).unwrap(),NamedColor::CornSilk);
491+
assert_eq!(from_value::<NamedColor>(json!("crimson")).unwrap(),NamedColor::Crimson);
492+
assert_eq!(from_value::<NamedColor>(json!("cyan")).unwrap(),NamedColor::Cyan);
493+
assert_eq!(from_value::<NamedColor>(json!("darkblue")).unwrap(),NamedColor::DarkBlue);
494+
assert_eq!(from_value::<NamedColor>(json!("darkcyan")).unwrap(),NamedColor::DarkCyan);
495+
assert_eq!(from_value::<NamedColor>(json!("darkgoldenrod")).unwrap(),NamedColor::DarkGoldenrod);
496+
assert_eq!(from_value::<NamedColor>(json!("darkgray")).unwrap(),NamedColor::DarkGray);
497+
assert_eq!(from_value::<NamedColor>(json!("darkgrey")).unwrap(),NamedColor::DarkGrey);
498+
assert_eq!(from_value::<NamedColor>(json!("darkgreen")).unwrap(),NamedColor::DarkGreen);
499+
assert_eq!(from_value::<NamedColor>(json!("darkorange")).unwrap(),NamedColor::DarkOrange);
500+
assert_eq!(from_value::<NamedColor>(json!("darkorchid")).unwrap(),NamedColor::DarkOrchid);
501+
assert_eq!(from_value::<NamedColor>(json!("darkred")).unwrap(),NamedColor::DarkRed);
502+
assert_eq!(from_value::<NamedColor>(json!("darksalmon")).unwrap(),NamedColor::DarkSalmon);
503+
assert_eq!(from_value::<NamedColor>(json!("darkseagreen")).unwrap(),NamedColor::DarkSeaGreen);
504+
assert_eq!(from_value::<NamedColor>(json!("darkslateblue")).unwrap(),NamedColor::DarkSlateBlue);
505+
assert_eq!(from_value::<NamedColor>(json!("darkslategray")).unwrap(),NamedColor::DarkSlateGray);
506+
assert_eq!(from_value::<NamedColor>(json!("darkslategrey")).unwrap(),NamedColor::DarkSlateGrey);
507+
assert_eq!(from_value::<NamedColor>(json!("darkturquoise")).unwrap(),NamedColor::DarkTurquoise);
508+
assert_eq!(from_value::<NamedColor>(json!("darkviolet")).unwrap(),NamedColor::DarkViolet);
509+
assert_eq!(from_value::<NamedColor>(json!("deeppink")).unwrap(),NamedColor::DeepPink);
510+
assert_eq!(from_value::<NamedColor>(json!("deepskyblue")).unwrap(),NamedColor::DeepSkyBlue);
511+
assert_eq!(from_value::<NamedColor>(json!("dimgray")).unwrap(),NamedColor::DimGray);
512+
assert_eq!(from_value::<NamedColor>(json!("dimgrey")).unwrap(),NamedColor::DimGrey);
513+
assert_eq!(from_value::<NamedColor>(json!("dodgerblue")).unwrap(),NamedColor::DodgerBlue);
514+
assert_eq!(from_value::<NamedColor>(json!("firebrick")).unwrap(),NamedColor::FireBrick);
515+
assert_eq!(from_value::<NamedColor>(json!("floralwhite")).unwrap(),NamedColor::FloralWhite);
516+
assert_eq!(from_value::<NamedColor>(json!("forestgreen")).unwrap(),NamedColor::ForestGreen);
517+
assert_eq!(from_value::<NamedColor>(json!("fuchsia")).unwrap(),NamedColor::Fuchsia);
518+
assert_eq!(from_value::<NamedColor>(json!("gainsboro")).unwrap(),NamedColor::Gainsboro);
519+
assert_eq!(from_value::<NamedColor>(json!("ghostwhite")).unwrap(),NamedColor::GhostWhite);
520+
assert_eq!(from_value::<NamedColor>(json!("gold")).unwrap(),NamedColor::Gold);
521+
assert_eq!(from_value::<NamedColor>(json!("goldenrod")).unwrap(),NamedColor::Goldenrod);
522+
assert_eq!(from_value::<NamedColor>(json!("gray")).unwrap(),NamedColor::Gray);
523+
assert_eq!(from_value::<NamedColor>(json!("grey")).unwrap(),NamedColor::Grey);
524+
assert_eq!(from_value::<NamedColor>(json!("green")).unwrap(),NamedColor::Green);
525+
assert_eq!(from_value::<NamedColor>(json!("greenyellow")).unwrap(),NamedColor::GreenYellow);
526+
assert_eq!(from_value::<NamedColor>(json!("honeydew")).unwrap(),NamedColor::Honeydew);
527+
assert_eq!(from_value::<NamedColor>(json!("hotpink")).unwrap(),NamedColor::HotPink);
528+
assert_eq!(from_value::<NamedColor>(json!("indianred")).unwrap(),NamedColor::IndianRed);
529+
assert_eq!(from_value::<NamedColor>(json!("indigo")).unwrap(),NamedColor::Indigo);
530+
assert_eq!(from_value::<NamedColor>(json!("ivory")).unwrap(),NamedColor::Ivory);
531+
assert_eq!(from_value::<NamedColor>(json!("khaki")).unwrap(),NamedColor::Khaki);
532+
assert_eq!(from_value::<NamedColor>(json!("lavender")).unwrap(),NamedColor::Lavender);
533+
assert_eq!(from_value::<NamedColor>(json!("lavenderblush")).unwrap(),NamedColor::LavenderBlush);
534+
assert_eq!(from_value::<NamedColor>(json!("lawngreen")).unwrap(),NamedColor::LawnGreen);
535+
assert_eq!(from_value::<NamedColor>(json!("lemonchiffon")).unwrap(),NamedColor::LemonChiffon);
536+
assert_eq!(from_value::<NamedColor>(json!("lightblue")).unwrap(),NamedColor::LightBlue);
537+
assert_eq!(from_value::<NamedColor>(json!("lightcoral")).unwrap(),NamedColor::LightCoral);
538+
assert_eq!(from_value::<NamedColor>(json!("lightcyan")).unwrap(),NamedColor::LightCyan);
539+
assert_eq!(from_value::<NamedColor>(json!("lightgoldenrodyellow")).unwrap(),NamedColor::LightGoldenrodYellow);
540+
assert_eq!(from_value::<NamedColor>(json!("lightgray")).unwrap(),NamedColor::LightGray);
541+
assert_eq!(from_value::<NamedColor>(json!("lightgrey")).unwrap(),NamedColor::LightGrey);
542+
assert_eq!(from_value::<NamedColor>(json!("lightgreen")).unwrap(),NamedColor::LightGreen);
543+
assert_eq!(from_value::<NamedColor>(json!("lightpink")).unwrap(),NamedColor::LightPink);
544+
assert_eq!(from_value::<NamedColor>(json!("lightsalmon")).unwrap(),NamedColor::LightSalmon);
545+
assert_eq!(from_value::<NamedColor>(json!("lightseagreen")).unwrap(),NamedColor::LightSeaGreen);
546+
assert_eq!(from_value::<NamedColor>(json!("lightskyblue")).unwrap(),NamedColor::LightSkyBlue);
547+
assert_eq!(from_value::<NamedColor>(json!("lightslategray")).unwrap(),NamedColor::LightSlateGray);
548+
assert_eq!(from_value::<NamedColor>(json!("lightslategrey")).unwrap(),NamedColor::LightSlateGrey);
549+
assert_eq!(from_value::<NamedColor>(json!("lightsteelblue")).unwrap(),NamedColor::LightSteelBlue);
550+
assert_eq!(from_value::<NamedColor>(json!("lightyellow")).unwrap(),NamedColor::LightYellow);
551+
assert_eq!(from_value::<NamedColor>(json!("lime")).unwrap(),NamedColor::Lime);
552+
assert_eq!(from_value::<NamedColor>(json!("limegreen")).unwrap(),NamedColor::LimeGreen);
553+
assert_eq!(from_value::<NamedColor>(json!("linen")).unwrap(),NamedColor::Linen);
554+
assert_eq!(from_value::<NamedColor>(json!("magenta")).unwrap(),NamedColor::Magenta);
555+
assert_eq!(from_value::<NamedColor>(json!("maroon")).unwrap(),NamedColor::Maroon);
556+
assert_eq!(from_value::<NamedColor>(json!("mediumaquamarine")).unwrap(),NamedColor::MediumAquamarine);
557+
assert_eq!(from_value::<NamedColor>(json!("mediumblue")).unwrap(),NamedColor::MediumBlue);
558+
assert_eq!(from_value::<NamedColor>(json!("mediumorchid")).unwrap(),NamedColor::MediumOrchid);
559+
assert_eq!(from_value::<NamedColor>(json!("mediumpurple")).unwrap(),NamedColor::MediumPurple);
560+
assert_eq!(from_value::<NamedColor>(json!("mediumseagreen")).unwrap(),NamedColor::MediumSeaGreen);
561+
assert_eq!(from_value::<NamedColor>(json!("mediumslateblue")).unwrap(),NamedColor::MediumSlateBlue);
562+
assert_eq!(from_value::<NamedColor>(json!("mediumspringgreen")).unwrap(),NamedColor::MediumSpringGreen);
563+
assert_eq!(from_value::<NamedColor>(json!("mediumturquoise")).unwrap(),NamedColor::MediumTurquoise);
564+
assert_eq!(from_value::<NamedColor>(json!("mediumvioletred")).unwrap(),NamedColor::MediumVioletRed);
565+
assert_eq!(from_value::<NamedColor>(json!("midnightblue")).unwrap(),NamedColor::MidnightBlue);
566+
assert_eq!(from_value::<NamedColor>(json!("mintcream")).unwrap(),NamedColor::MintCream);
567+
assert_eq!(from_value::<NamedColor>(json!("mistyrose")).unwrap(),NamedColor::MistyRose);
568+
assert_eq!(from_value::<NamedColor>(json!("moccasin")).unwrap(),NamedColor::Moccasin);
569+
assert_eq!(from_value::<NamedColor>(json!("navajowhite")).unwrap(),NamedColor::NavajoWhite);
570+
assert_eq!(from_value::<NamedColor>(json!("navy")).unwrap(),NamedColor::Navy);
571+
assert_eq!(from_value::<NamedColor>(json!("oldlace")).unwrap(),NamedColor::OldLace);
572+
assert_eq!(from_value::<NamedColor>(json!("olive")).unwrap(),NamedColor::Olive);
573+
assert_eq!(from_value::<NamedColor>(json!("olivedrab")).unwrap(),NamedColor::OliveDrab);
574+
assert_eq!(from_value::<NamedColor>(json!("orange")).unwrap(),NamedColor::Orange);
575+
assert_eq!(from_value::<NamedColor>(json!("orangered")).unwrap(),NamedColor::OrangeRed);
576+
assert_eq!(from_value::<NamedColor>(json!("orchid")).unwrap(),NamedColor::Orchid);
577+
assert_eq!(from_value::<NamedColor>(json!("palegoldenrod")).unwrap(),NamedColor::PaleGoldenrod);
578+
assert_eq!(from_value::<NamedColor>(json!("palegreen")).unwrap(),NamedColor::PaleGreen);
579+
assert_eq!(from_value::<NamedColor>(json!("paleturquoise")).unwrap(),NamedColor::PaleTurquoise);
580+
assert_eq!(from_value::<NamedColor>(json!("palevioletred")).unwrap(),NamedColor::PaleVioletRed);
581+
assert_eq!(from_value::<NamedColor>(json!("papayawhip")).unwrap(),NamedColor::PapayaWhip);
582+
assert_eq!(from_value::<NamedColor>(json!("peachpuff")).unwrap(),NamedColor::PeachPuff);
583+
assert_eq!(from_value::<NamedColor>(json!("peru")).unwrap(),NamedColor::Peru);
584+
assert_eq!(from_value::<NamedColor>(json!("pink")).unwrap(),NamedColor::Pink);
585+
assert_eq!(from_value::<NamedColor>(json!("plum")).unwrap(),NamedColor::Plum);
586+
assert_eq!(from_value::<NamedColor>(json!("powderblue")).unwrap(),NamedColor::PowderBlue);
587+
assert_eq!(from_value::<NamedColor>(json!("purple")).unwrap(),NamedColor::Purple);
588+
assert_eq!(from_value::<NamedColor>(json!("rebeccapurple")).unwrap(),NamedColor::RebeccaPurple);
589+
assert_eq!(from_value::<NamedColor>(json!("red")).unwrap(),NamedColor::Red);
590+
assert_eq!(from_value::<NamedColor>(json!("rosybrown")).unwrap(),NamedColor::RosyBrown);
591+
assert_eq!(from_value::<NamedColor>(json!("royalblue")).unwrap(),NamedColor::RoyalBlue);
592+
assert_eq!(from_value::<NamedColor>(json!("saddlebrown")).unwrap(),NamedColor::SaddleBrown);
593+
assert_eq!(from_value::<NamedColor>(json!("salmon")).unwrap(),NamedColor::Salmon);
594+
assert_eq!(from_value::<NamedColor>(json!("sandybrown")).unwrap(),NamedColor::SandyBrown);
595+
assert_eq!(from_value::<NamedColor>(json!("seagreen")).unwrap(),NamedColor::SeaGreen);
596+
assert_eq!(from_value::<NamedColor>(json!("seashell")).unwrap(),NamedColor::Seashell);
597+
assert_eq!(from_value::<NamedColor>(json!("sienna")).unwrap(),NamedColor::Sienna);
598+
assert_eq!(from_value::<NamedColor>(json!("silver")).unwrap(),NamedColor::Silver);
599+
assert_eq!(from_value::<NamedColor>(json!("skyblue")).unwrap(),NamedColor::SkyBlue);
600+
assert_eq!(from_value::<NamedColor>(json!("slateblue")).unwrap(),NamedColor::SlateBlue);
601+
assert_eq!(from_value::<NamedColor>(json!("slategray")).unwrap(),NamedColor::SlateGray);
602+
assert_eq!(from_value::<NamedColor>(json!("slategrey")).unwrap(),NamedColor::SlateGrey);
603+
assert_eq!(from_value::<NamedColor>(json!("snow")).unwrap(),NamedColor::Snow);
604+
assert_eq!(from_value::<NamedColor>(json!("springgreen")).unwrap(),NamedColor::SpringGreen);
605+
assert_eq!(from_value::<NamedColor>(json!("steelblue")).unwrap(),NamedColor::SteelBlue);
606+
assert_eq!(from_value::<NamedColor>(json!("tan")).unwrap(),NamedColor::Tan);
607+
assert_eq!(from_value::<NamedColor>(json!("teal")).unwrap(),NamedColor::Teal);
608+
assert_eq!(from_value::<NamedColor>(json!("thistle")).unwrap(),NamedColor::Thistle);
609+
assert_eq!(from_value::<NamedColor>(json!("tomato")).unwrap(),NamedColor::Tomato);
610+
assert_eq!(from_value::<NamedColor>(json!("turquoise")).unwrap(),NamedColor::Turquoise);
611+
assert_eq!(from_value::<NamedColor>(json!("violet")).unwrap(),NamedColor::Violet);
612+
assert_eq!(from_value::<NamedColor>(json!("wheat")).unwrap(),NamedColor::Wheat);
613+
assert_eq!(from_value::<NamedColor>(json!("white")).unwrap(),NamedColor::White);
614+
assert_eq!(from_value::<NamedColor>(json!("whitesmoke")).unwrap(),NamedColor::WhiteSmoke);
615+
assert_eq!(from_value::<NamedColor>(json!("yellow")).unwrap(),NamedColor::Yellow);
616+
assert_eq!(from_value::<NamedColor>(json!("yellowgreen")).unwrap(),NamedColor::YellowGreen);
617+
assert_eq!(from_value::<NamedColor>(json!("transparent")).unwrap(),NamedColor::Transparent);
618+
}
467619
}

0 commit comments

Comments
 (0)