From edb10e092ff8184c4c598d94ab85b115ecdfbf78 Mon Sep 17 00:00:00 2001 From: Joachim Schiele Date: Tue, 21 Nov 2023 19:42:13 +0100 Subject: [PATCH 1/2] Extended data() with item_style --- charming/src/element/border_type.rs | 2 +- charming/src/element/color.rs | 3 ++- charming/src/element/item_style.rs | 2 +- charming/src/series/sankey.rs | 37 +++++++++++++++++++++++++---- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/charming/src/element/border_type.rs b/charming/src/element/border_type.rs index b9f1b43..c331421 100644 --- a/charming/src/element/border_type.rs +++ b/charming/src/element/border_type.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, 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..036276c 100644 --- a/charming/src/element/color.rs +++ b/charming/src/element/color.rs @@ -18,7 +18,7 @@ impl From<&str> for ColorBy { } } -#[derive(Serialize)] +#[derive(Serialize, Clone, Debug)] pub struct ColorStop { offset: f64, color: String, @@ -33,6 +33,7 @@ impl ColorStop { } } +#[derive(Clone, 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..0c3577f 100644 --- a/charming/src/element/item_style.rs +++ b/charming/src/element/item_style.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{border_type::BorderType, color::Color}; -#[derive(Serialize)] +#[derive(Serialize, 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..9a2d004 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, 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, } } } From a0d19c84598a69a93f1ffd26aba61f4858584f66 Mon Sep 17 00:00:00 2001 From: Joachim Schiele Date: Wed, 7 Feb 2024 14:38:00 +0000 Subject: [PATCH 2/2] Adding Deserialize as wished --- charming/src/element/border_type.rs | 4 ++-- charming/src/element/color.rs | 6 +++--- charming/src/element/item_style.rs | 5 ++--- charming/src/series/sankey.rs | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/charming/src/element/border_type.rs b/charming/src/element/border_type.rs index c331421..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, Clone, Debug)] +#[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 036276c..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, Clone, Debug)] +#[derive(Serialize, Deserialize, Clone, Debug)] pub struct ColorStop { offset: f64, color: String, @@ -33,7 +33,7 @@ impl ColorStop { } } -#[derive(Clone, Debug)] +#[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 0c3577f..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, Clone, Debug)] +#[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 9a2d004..6f71578 100644 --- a/charming/src/series/sankey.rs +++ b/charming/src/series/sankey.rs @@ -13,7 +13,7 @@ pub enum SankeyNodeAlign { Justify, } -#[derive(Serialize, Debug)] +#[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct SankeyNode { pub name: String,