diff --git a/plotly/src/common/color.rs b/plotly/src/common/color.rs index e03e0ee..47877ea 100644 --- a/plotly/src/common/color.rs +++ b/plotly/src/common/color.rs @@ -19,7 +19,7 @@ /// [`predefined colors`]: use dyn_clone::DynClone; use erased_serde::Serialize as ErasedSerialize; -use serde::Serialize; +use serde::{Deserialize, Serialize}; /// A marker trait allowing several ways to describe a color. pub trait Color: DynClone + ErasedSerialize + Send + Sync + std::fmt::Debug + 'static {} @@ -61,7 +61,7 @@ impl Into>> for ColorArray { /// A type-safe way of constructing a valid RGB color from constituent R, G and /// B channels. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Deserialize)] pub struct Rgb { pub(crate) r: u8, pub(crate) g: u8, @@ -86,7 +86,7 @@ impl Serialize for Rgb { /// A type-safe way of constructing a valid RGBA color from constituent R, G, B /// and A channels. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Deserialize)] pub struct Rgba { pub(crate) r: u8, pub(crate) g: u8, @@ -116,7 +116,7 @@ impl Serialize for Rgba { /// Cross-browser compatible [`predefined colors`]. /// /// [`predefined colors`]: -#[derive(Debug, Clone, Copy, Serialize)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum NamedColor { AliceBlue, @@ -272,7 +272,7 @@ pub enum NamedColor { #[cfg(test)] mod tests { - use serde_json::{json, to_value}; + use serde_json::{from_str, from_value, json, to_value}; use super::*; @@ -464,4 +464,156 @@ mod tests { assert_eq!(to_value(NamedColor::YellowGreen).unwrap(), json!("yellowgreen")); assert_eq!(to_value(NamedColor::Transparent).unwrap(), json!("transparent")); } + + #[test] + #[rustfmt::skip] + fn test_deserialize_named_color() { + // assert_eq!(from_str::("aliceblue").unwrap(), NamedColor::AliceBlue); + assert_eq!(from_value::(json!("aliceblue")).unwrap(), NamedColor::AliceBlue); + assert_eq!(from_value::(json!("antiquewhite")).unwrap(),NamedColor::AntiqueWhite); + assert_eq!(from_value::(json!("aqua")).unwrap(),NamedColor::Aqua); + assert_eq!(from_value::(json!("aquamarine")).unwrap(),NamedColor::Aquamarine); + assert_eq!(from_value::(json!("azure")).unwrap(),NamedColor::Azure); + assert_eq!(from_value::(json!("beige")).unwrap(),NamedColor::Beige); + assert_eq!(from_value::(json!("bisque")).unwrap(),NamedColor::Bisque); + assert_eq!(from_value::(json!("black")).unwrap(),NamedColor::Black); + assert_eq!(from_value::(json!("blanchedalmond")).unwrap(),NamedColor::BlanchedAlmond); + assert_eq!(from_value::(json!("blue")).unwrap(),NamedColor::Blue); + assert_eq!(from_value::(json!("blueviolet")).unwrap(),NamedColor::BlueViolet); + assert_eq!(from_value::(json!("brown")).unwrap(),NamedColor::Brown); + assert_eq!(from_value::(json!("burlywood")).unwrap(),NamedColor::BurlyWood); + assert_eq!(from_value::(json!("cadetblue")).unwrap(),NamedColor::CadetBlue); + assert_eq!(from_value::(json!("chartreuse")).unwrap(),NamedColor::Chartreuse); + assert_eq!(from_value::(json!("chocolate")).unwrap(),NamedColor::Chocolate); + assert_eq!(from_value::(json!("coral")).unwrap(),NamedColor::Coral); + assert_eq!(from_value::(json!("cornflowerblue")).unwrap(),NamedColor::CornflowerBlue); + assert_eq!(from_value::(json!("cornsilk")).unwrap(),NamedColor::CornSilk); + assert_eq!(from_value::(json!("crimson")).unwrap(),NamedColor::Crimson); + assert_eq!(from_value::(json!("cyan")).unwrap(),NamedColor::Cyan); + assert_eq!(from_value::(json!("darkblue")).unwrap(),NamedColor::DarkBlue); + assert_eq!(from_value::(json!("darkcyan")).unwrap(),NamedColor::DarkCyan); + assert_eq!(from_value::(json!("darkgoldenrod")).unwrap(),NamedColor::DarkGoldenrod); + assert_eq!(from_value::(json!("darkgray")).unwrap(),NamedColor::DarkGray); + assert_eq!(from_value::(json!("darkgrey")).unwrap(),NamedColor::DarkGrey); + assert_eq!(from_value::(json!("darkgreen")).unwrap(),NamedColor::DarkGreen); + assert_eq!(from_value::(json!("darkorange")).unwrap(),NamedColor::DarkOrange); + assert_eq!(from_value::(json!("darkorchid")).unwrap(),NamedColor::DarkOrchid); + assert_eq!(from_value::(json!("darkred")).unwrap(),NamedColor::DarkRed); + assert_eq!(from_value::(json!("darksalmon")).unwrap(),NamedColor::DarkSalmon); + assert_eq!(from_value::(json!("darkseagreen")).unwrap(),NamedColor::DarkSeaGreen); + assert_eq!(from_value::(json!("darkslateblue")).unwrap(),NamedColor::DarkSlateBlue); + assert_eq!(from_value::(json!("darkslategray")).unwrap(),NamedColor::DarkSlateGray); + assert_eq!(from_value::(json!("darkslategrey")).unwrap(),NamedColor::DarkSlateGrey); + assert_eq!(from_value::(json!("darkturquoise")).unwrap(),NamedColor::DarkTurquoise); + assert_eq!(from_value::(json!("darkviolet")).unwrap(),NamedColor::DarkViolet); + assert_eq!(from_value::(json!("deeppink")).unwrap(),NamedColor::DeepPink); + assert_eq!(from_value::(json!("deepskyblue")).unwrap(),NamedColor::DeepSkyBlue); + assert_eq!(from_value::(json!("dimgray")).unwrap(),NamedColor::DimGray); + assert_eq!(from_value::(json!("dimgrey")).unwrap(),NamedColor::DimGrey); + assert_eq!(from_value::(json!("dodgerblue")).unwrap(),NamedColor::DodgerBlue); + assert_eq!(from_value::(json!("firebrick")).unwrap(),NamedColor::FireBrick); + assert_eq!(from_value::(json!("floralwhite")).unwrap(),NamedColor::FloralWhite); + assert_eq!(from_value::(json!("forestgreen")).unwrap(),NamedColor::ForestGreen); + assert_eq!(from_value::(json!("fuchsia")).unwrap(),NamedColor::Fuchsia); + assert_eq!(from_value::(json!("gainsboro")).unwrap(),NamedColor::Gainsboro); + assert_eq!(from_value::(json!("ghostwhite")).unwrap(),NamedColor::GhostWhite); + assert_eq!(from_value::(json!("gold")).unwrap(),NamedColor::Gold); + assert_eq!(from_value::(json!("goldenrod")).unwrap(),NamedColor::Goldenrod); + assert_eq!(from_value::(json!("gray")).unwrap(),NamedColor::Gray); + assert_eq!(from_value::(json!("grey")).unwrap(),NamedColor::Grey); + assert_eq!(from_value::(json!("green")).unwrap(),NamedColor::Green); + assert_eq!(from_value::(json!("greenyellow")).unwrap(),NamedColor::GreenYellow); + assert_eq!(from_value::(json!("honeydew")).unwrap(),NamedColor::Honeydew); + assert_eq!(from_value::(json!("hotpink")).unwrap(),NamedColor::HotPink); + assert_eq!(from_value::(json!("indianred")).unwrap(),NamedColor::IndianRed); + assert_eq!(from_value::(json!("indigo")).unwrap(),NamedColor::Indigo); + assert_eq!(from_value::(json!("ivory")).unwrap(),NamedColor::Ivory); + assert_eq!(from_value::(json!("khaki")).unwrap(),NamedColor::Khaki); + assert_eq!(from_value::(json!("lavender")).unwrap(),NamedColor::Lavender); + assert_eq!(from_value::(json!("lavenderblush")).unwrap(),NamedColor::LavenderBlush); + assert_eq!(from_value::(json!("lawngreen")).unwrap(),NamedColor::LawnGreen); + assert_eq!(from_value::(json!("lemonchiffon")).unwrap(),NamedColor::LemonChiffon); + assert_eq!(from_value::(json!("lightblue")).unwrap(),NamedColor::LightBlue); + assert_eq!(from_value::(json!("lightcoral")).unwrap(),NamedColor::LightCoral); + assert_eq!(from_value::(json!("lightcyan")).unwrap(),NamedColor::LightCyan); + assert_eq!(from_value::(json!("lightgoldenrodyellow")).unwrap(),NamedColor::LightGoldenrodYellow); + assert_eq!(from_value::(json!("lightgray")).unwrap(),NamedColor::LightGray); + assert_eq!(from_value::(json!("lightgrey")).unwrap(),NamedColor::LightGrey); + assert_eq!(from_value::(json!("lightgreen")).unwrap(),NamedColor::LightGreen); + assert_eq!(from_value::(json!("lightpink")).unwrap(),NamedColor::LightPink); + assert_eq!(from_value::(json!("lightsalmon")).unwrap(),NamedColor::LightSalmon); + assert_eq!(from_value::(json!("lightseagreen")).unwrap(),NamedColor::LightSeaGreen); + assert_eq!(from_value::(json!("lightskyblue")).unwrap(),NamedColor::LightSkyBlue); + assert_eq!(from_value::(json!("lightslategray")).unwrap(),NamedColor::LightSlateGray); + assert_eq!(from_value::(json!("lightslategrey")).unwrap(),NamedColor::LightSlateGrey); + assert_eq!(from_value::(json!("lightsteelblue")).unwrap(),NamedColor::LightSteelBlue); + assert_eq!(from_value::(json!("lightyellow")).unwrap(),NamedColor::LightYellow); + assert_eq!(from_value::(json!("lime")).unwrap(),NamedColor::Lime); + assert_eq!(from_value::(json!("limegreen")).unwrap(),NamedColor::LimeGreen); + assert_eq!(from_value::(json!("linen")).unwrap(),NamedColor::Linen); + assert_eq!(from_value::(json!("magenta")).unwrap(),NamedColor::Magenta); + assert_eq!(from_value::(json!("maroon")).unwrap(),NamedColor::Maroon); + assert_eq!(from_value::(json!("mediumaquamarine")).unwrap(),NamedColor::MediumAquamarine); + assert_eq!(from_value::(json!("mediumblue")).unwrap(),NamedColor::MediumBlue); + assert_eq!(from_value::(json!("mediumorchid")).unwrap(),NamedColor::MediumOrchid); + assert_eq!(from_value::(json!("mediumpurple")).unwrap(),NamedColor::MediumPurple); + assert_eq!(from_value::(json!("mediumseagreen")).unwrap(),NamedColor::MediumSeaGreen); + assert_eq!(from_value::(json!("mediumslateblue")).unwrap(),NamedColor::MediumSlateBlue); + assert_eq!(from_value::(json!("mediumspringgreen")).unwrap(),NamedColor::MediumSpringGreen); + assert_eq!(from_value::(json!("mediumturquoise")).unwrap(),NamedColor::MediumTurquoise); + assert_eq!(from_value::(json!("mediumvioletred")).unwrap(),NamedColor::MediumVioletRed); + assert_eq!(from_value::(json!("midnightblue")).unwrap(),NamedColor::MidnightBlue); + assert_eq!(from_value::(json!("mintcream")).unwrap(),NamedColor::MintCream); + assert_eq!(from_value::(json!("mistyrose")).unwrap(),NamedColor::MistyRose); + assert_eq!(from_value::(json!("moccasin")).unwrap(),NamedColor::Moccasin); + assert_eq!(from_value::(json!("navajowhite")).unwrap(),NamedColor::NavajoWhite); + assert_eq!(from_value::(json!("navy")).unwrap(),NamedColor::Navy); + assert_eq!(from_value::(json!("oldlace")).unwrap(),NamedColor::OldLace); + assert_eq!(from_value::(json!("olive")).unwrap(),NamedColor::Olive); + assert_eq!(from_value::(json!("olivedrab")).unwrap(),NamedColor::OliveDrab); + assert_eq!(from_value::(json!("orange")).unwrap(),NamedColor::Orange); + assert_eq!(from_value::(json!("orangered")).unwrap(),NamedColor::OrangeRed); + assert_eq!(from_value::(json!("orchid")).unwrap(),NamedColor::Orchid); + assert_eq!(from_value::(json!("palegoldenrod")).unwrap(),NamedColor::PaleGoldenrod); + assert_eq!(from_value::(json!("palegreen")).unwrap(),NamedColor::PaleGreen); + assert_eq!(from_value::(json!("paleturquoise")).unwrap(),NamedColor::PaleTurquoise); + assert_eq!(from_value::(json!("palevioletred")).unwrap(),NamedColor::PaleVioletRed); + assert_eq!(from_value::(json!("papayawhip")).unwrap(),NamedColor::PapayaWhip); + assert_eq!(from_value::(json!("peachpuff")).unwrap(),NamedColor::PeachPuff); + assert_eq!(from_value::(json!("peru")).unwrap(),NamedColor::Peru); + assert_eq!(from_value::(json!("pink")).unwrap(),NamedColor::Pink); + assert_eq!(from_value::(json!("plum")).unwrap(),NamedColor::Plum); + assert_eq!(from_value::(json!("powderblue")).unwrap(),NamedColor::PowderBlue); + assert_eq!(from_value::(json!("purple")).unwrap(),NamedColor::Purple); + assert_eq!(from_value::(json!("rebeccapurple")).unwrap(),NamedColor::RebeccaPurple); + assert_eq!(from_value::(json!("red")).unwrap(),NamedColor::Red); + assert_eq!(from_value::(json!("rosybrown")).unwrap(),NamedColor::RosyBrown); + assert_eq!(from_value::(json!("royalblue")).unwrap(),NamedColor::RoyalBlue); + assert_eq!(from_value::(json!("saddlebrown")).unwrap(),NamedColor::SaddleBrown); + assert_eq!(from_value::(json!("salmon")).unwrap(),NamedColor::Salmon); + assert_eq!(from_value::(json!("sandybrown")).unwrap(),NamedColor::SandyBrown); + assert_eq!(from_value::(json!("seagreen")).unwrap(),NamedColor::SeaGreen); + assert_eq!(from_value::(json!("seashell")).unwrap(),NamedColor::Seashell); + assert_eq!(from_value::(json!("sienna")).unwrap(),NamedColor::Sienna); + assert_eq!(from_value::(json!("silver")).unwrap(),NamedColor::Silver); + assert_eq!(from_value::(json!("skyblue")).unwrap(),NamedColor::SkyBlue); + assert_eq!(from_value::(json!("slateblue")).unwrap(),NamedColor::SlateBlue); + assert_eq!(from_value::(json!("slategray")).unwrap(),NamedColor::SlateGray); + assert_eq!(from_value::(json!("slategrey")).unwrap(),NamedColor::SlateGrey); + assert_eq!(from_value::(json!("snow")).unwrap(),NamedColor::Snow); + assert_eq!(from_value::(json!("springgreen")).unwrap(),NamedColor::SpringGreen); + assert_eq!(from_value::(json!("steelblue")).unwrap(),NamedColor::SteelBlue); + assert_eq!(from_value::(json!("tan")).unwrap(),NamedColor::Tan); + assert_eq!(from_value::(json!("teal")).unwrap(),NamedColor::Teal); + assert_eq!(from_value::(json!("thistle")).unwrap(),NamedColor::Thistle); + assert_eq!(from_value::(json!("tomato")).unwrap(),NamedColor::Tomato); + assert_eq!(from_value::(json!("turquoise")).unwrap(),NamedColor::Turquoise); + assert_eq!(from_value::(json!("violet")).unwrap(),NamedColor::Violet); + assert_eq!(from_value::(json!("wheat")).unwrap(),NamedColor::Wheat); + assert_eq!(from_value::(json!("white")).unwrap(),NamedColor::White); + assert_eq!(from_value::(json!("whitesmoke")).unwrap(),NamedColor::WhiteSmoke); + assert_eq!(from_value::(json!("yellow")).unwrap(),NamedColor::Yellow); + assert_eq!(from_value::(json!("yellowgreen")).unwrap(),NamedColor::YellowGreen); + assert_eq!(from_value::(json!("transparent")).unwrap(),NamedColor::Transparent); + } }