diff --git a/charming/src/element/border_type.rs b/charming/src/element/border_type.rs index b9f1b43..54e3ddc 100644 --- a/charming/src/element/border_type.rs +++ b/charming/src/element/border_type.rs @@ -1,6 +1,6 @@ -use serde::Serialize; +use serde::{Serialize, Deserialize}; -#[derive(Serialize)] +#[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "snake_case")] pub enum BorderType { Solid, diff --git a/charming/src/element/color.rs b/charming/src/element/color.rs index e6c2028..2a7a160 100644 --- a/charming/src/element/color.rs +++ b/charming/src/element/color.rs @@ -1,5 +1,5 @@ use serde::ser::{SerializeStruct, Serializer}; -use serde::Serialize; +use serde::{Serialize, Deserialize}; #[derive(Serialize)] #[serde(rename_all = "snake_case")] @@ -18,7 +18,7 @@ impl From<&str> for ColorBy { } } -#[derive(Serialize)] +#[derive(Serialize, Deserialize, Clone, Debug)] pub struct ColorStop { offset: f64, color: String, @@ -33,6 +33,7 @@ impl ColorStop { } } +#[derive(Clone, Deserialize, Debug)] pub enum Color { Value(String), LinearGradient { diff --git a/charming/src/element/item_style.rs b/charming/src/element/item_style.rs index 3ee7304..1a1ac68 100644 --- a/charming/src/element/item_style.rs +++ b/charming/src/element/item_style.rs @@ -1,8 +1,7 @@ -use serde::Serialize; - +use serde::{Serialize, Deserialize}; use super::{border_type::BorderType, color::Color}; -#[derive(Serialize)] +#[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct ItemStyle { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/series/sankey.rs b/charming/src/series/sankey.rs index ec9db4f..6f71578 100644 --- a/charming/src/series/sankey.rs +++ b/charming/src/series/sankey.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::{ datatype::CompositeValue, - element::{Emphasis, Label, LineStyle, Orient}, + element::{Emphasis, Label, LineStyle, Orient, ItemStyle}, }; #[derive(Serialize)] @@ -13,7 +13,7 @@ pub enum SankeyNodeAlign { Justify, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct SankeyNode { pub name: String, @@ -23,17 +23,46 @@ pub struct SankeyNode { #[serde(skip_serializing_if = "Option::is_none")] pub depth: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub item_style: Option, +} + +impl SankeyNode { + pub fn new(name: S) -> Self where S: Into { + Self { + name: name.into(), + value: None, + depth: None, + item_style: None, + } + } + + pub fn value>(mut self, value: V) -> Self { + self.value = Some(value.into()); + self + } + pub fn depth>(mut self, depth: D) -> Self { + self.depth = Some(depth.into()); + self + } + + pub fn item_style>(mut self, item_style: S) -> Self { + self.item_style = Some(item_style.into()); + self + } } impl From for SankeyNode -where - S: Into, + where + S: Into, { fn from(name: S) -> Self { SankeyNode { name: name.into(), value: None, depth: None, + item_style: None, } } }