From a73962e29ee89b1e58be674223426f58cc76d5b7 Mon Sep 17 00:00:00 2001 From: LukaOber Date: Fri, 4 Oct 2024 13:49:54 +0200 Subject: [PATCH 01/15] fix cargo fmt --- charming/src/element/border_type.rs | 2 +- charming/src/element/color.rs | 2 +- charming/src/element/item_style.rs | 2 +- charming/src/element/text_style.rs | 2 +- charming/src/series/sankey.rs | 11 +++++++---- gallery/src/line/line_gradient.rs | 6 +----- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/charming/src/element/border_type.rs b/charming/src/element/border_type.rs index 54e3ddc..051a9ae 100644 --- a/charming/src/element/border_type.rs +++ b/charming/src/element/border_type.rs @@ -1,4 +1,4 @@ -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "snake_case")] diff --git a/charming/src/element/color.rs b/charming/src/element/color.rs index 2a7a160..e0ad8cd 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, Deserialize}; +use serde::{Deserialize, Serialize}; #[derive(Serialize)] #[serde(rename_all = "snake_case")] diff --git a/charming/src/element/item_style.rs b/charming/src/element/item_style.rs index d530cd0..8b5eb97 100644 --- a/charming/src/element/item_style.rs +++ b/charming/src/element/item_style.rs @@ -1,5 +1,5 @@ -use serde::{Serialize, Deserialize}; use super::{border_type::BorderType, color::Color}; +use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "camelCase")] diff --git a/charming/src/element/text_style.rs b/charming/src/element/text_style.rs index 1ab66a0..78dd854 100644 --- a/charming/src/element/text_style.rs +++ b/charming/src/element/text_style.rs @@ -25,7 +25,7 @@ pub struct TextStyle { #[serde(skip_serializing_if = "Option::is_none")] align: Option, - + #[serde(skip_serializing_if = "Option::is_none")] padding: Option<[f64; 4]>, } diff --git a/charming/src/series/sankey.rs b/charming/src/series/sankey.rs index a14d22b..7013cd3 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, ItemStyle}, + element::{Emphasis, ItemStyle, Label, LineStyle, Orient}, }; #[derive(Serialize)] @@ -29,7 +29,10 @@ pub struct SankeyNode { } impl SankeyNode { - pub fn new(name: S) -> Self where S: Into { + pub fn new(name: S) -> Self + where + S: Into, + { Self { name: name.into(), value: None, @@ -54,8 +57,8 @@ impl SankeyNode { } impl From for SankeyNode - where - S: Into, +where + S: Into, { fn from(name: S) -> Self { SankeyNode { diff --git a/gallery/src/line/line_gradient.rs b/gallery/src/line/line_gradient.rs index 9fe1034..3db25c4 100644 --- a/gallery/src/line/line_gradient.rs +++ b/gallery/src/line/line_gradient.rs @@ -99,11 +99,7 @@ pub fn chart() -> Chart { .max((data_list.len() - 1) as f64), ) .x_axis(Axis::new().data(data_list.to_vec())) - .x_axis( - Axis::new() - .data(data_list.to_vec()) - .grid_index(1), - ) + .x_axis(Axis::new().data(data_list.to_vec()).grid_index(1)) .y_axis(Axis::new()) .y_axis(Axis::new().grid_index(1)) .grid(Grid::new().bottom("60%")) From 2b3217b384bf255d0b270076a6cf8f8174853500 Mon Sep 17 00:00:00 2001 From: LukaOber Date: Mon, 16 Sep 2024 13:36:15 +0200 Subject: [PATCH 02/15] Add note for address of interactive examples --- gallery/src/gallery.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gallery/src/gallery.rs b/gallery/src/gallery.rs index 1f893ba..bb5cda9 100644 --- a/gallery/src/gallery.rs +++ b/gallery/src/gallery.rs @@ -11,6 +11,8 @@ use charming_gallery::CHARTS; #[tokio::main] async fn main() { + println!("Access the plots at: http://127.0.0.1:5555"); + let app = Router::new() .route("/", get(index)) .route("/:type/:name", get(render)); From e7fa8a18d9cb4d52c791df7c0419cf696f7c5564 Mon Sep 17 00:00:00 2001 From: yuankunzhang Date: Sun, 6 Oct 2024 10:33:18 +0800 Subject: [PATCH 03/15] Bump deno-core version to v0.311 --- Cargo.lock | 486 +++++++++++++++++++----- charming/Cargo.toml | 4 +- charming/src/renderer/image_renderer.rs | 8 +- 3 files changed, 395 insertions(+), 103 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 25b5603..26e5e32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -76,7 +85,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.18", + "syn", ] [[package]] @@ -93,7 +102,7 @@ checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -110,7 +119,7 @@ checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39" dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -172,6 +181,15 @@ version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +[[package]] +name = "base64-simd" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +dependencies = [ + "simd-abstraction", +] + [[package]] name = "basic-toml" version = "0.1.2" @@ -181,6 +199,53 @@ dependencies = [ "serde", ] +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which 4.4.0", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bit_field" version = "0.10.2" @@ -193,6 +258,24 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -222,9 +305,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.4.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" @@ -232,6 +315,15 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -284,6 +376,17 @@ dependencies = [ "windows-targets 0.52.0", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -291,10 +394,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] -name = "convert_case" -version = "0.4.0" +name = "cooked-waker" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" [[package]] name = "core-foundation-sys" @@ -403,66 +506,67 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.232.0" +version = "0.311.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229ffd108e028b148a1a5a6122f771bc7c37094170226f44b8b93b3a9b79d114" +checksum = "5e09bd55da542fa1fde753aff617c355b5d782e763ab2a19e4371a56d7844cac" dependencies = [ "anyhow", + "bincode", + "bit-set", + "bit-vec", "bytes", + "cooked-waker", + "deno_core_icudata", "deno_ops", "deno_unsync", "futures", "libc", - "log", + "memoffset", "parking_lot", + "percent-encoding", "pin-project", "serde", "serde_json", "serde_v8", "smallvec", "sourcemap", + "static_assertions", "tokio", "url", "v8", ] +[[package]] +name = "deno_core_icudata" +version = "0.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13951ea98c0a4c372f162d669193b4c9d991512de9f2381dd161027f34b26b1" + [[package]] name = "deno_ops" -version = "0.108.0" +version = "0.187.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7dde627916f8539f3f0d2e754dda40810c8ca4d655f2eaac1ef54785a12fd27" +checksum = "e040fd4def8a67538fe38c9955fd970efc9f44284bd69d44f8992a456afd665d" dependencies = [ "proc-macro-rules", "proc-macro2", "quote", "strum", "strum_macros", - "syn 2.0.18", + "syn", "thiserror", ] [[package]] name = "deno_unsync" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a8f3722afd50e566ecfc783cc8a3a046bc4dd5eb45007431dfb2776aeb8993" +checksum = "2f36b4ef61a04ce201b925a5dffa90f88437d37fee4836c758470dd15ba7f05e" dependencies = [ + "parking_lot", "tokio", ] -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn 1.0.109", -] - [[package]] name = "digest" version = "0.10.7" @@ -475,9 +579,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "equivalent" @@ -485,6 +589,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "exr" version = "1.7.0" @@ -579,14 +693,20 @@ dependencies = [ [[package]] name = "fslock" -version = "0.1.8" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" dependencies = [ "libc", "winapi", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures" version = "0.3.28" @@ -643,7 +763,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -715,6 +835,21 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gzip-header" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" +dependencies = [ + "crc32fast", +] + [[package]] name = "half" version = "2.2.1" @@ -756,6 +891,15 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "0.2.9" @@ -896,6 +1040,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.8" @@ -935,6 +1088,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lebe" version = "0.5.2" @@ -943,9 +1102,19 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.0", +] [[package]] name = "libm" @@ -953,6 +1122,12 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + [[package]] name = "lock_api" version = "0.4.10" @@ -1026,9 +1201,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", "simd-adler32", @@ -1042,7 +1217,7 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1127,15 +1302,21 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "outref" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1154,6 +1335,12 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "percent-encoding" version = "2.3.0" @@ -1190,7 +1377,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1227,7 +1414,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1248,7 +1435,7 @@ version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", @@ -1261,6 +1448,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro-rules" version = "0.4.0" @@ -1269,7 +1466,7 @@ checksum = "07c277e4e643ef00c1233393c673f655e3672cf7eb3ba08a00bdd0ea59139b5f" dependencies = [ "proc-macro-rules-macros", "proc-macro2", - "syn 2.0.18", + "syn", ] [[package]] @@ -1281,7 +1478,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1311,6 +1508,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.8.5" @@ -1375,9 +1578,38 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", ] +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "resvg" version = "0.36.0" @@ -1419,22 +1651,32 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver 0.9.0", + "semver", ] [[package]] -name = "rustc_version" -version = "0.4.0" +name = "rustix" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "semver 1.0.17", + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1449,7 +1691,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71cd15fef9112a1f94ac64b58d1e4628192631ad6af4dc69997f995459c874e7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytemuck", "smallvec", "ttf-parser", @@ -1480,12 +1722,6 @@ dependencies = [ "semver-parser", ] -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" - [[package]] name = "semver-parser" version = "0.7.0" @@ -1520,7 +1756,7 @@ checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1559,12 +1795,10 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.141.0" +version = "0.220.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc689cb316d67b200e9f7449ce76cceb7e483e0f828d1a9c3d057c4367b6c26e" +checksum = "6e7a65d91d79acc82aa229aeb084f4a39bda269069bc1520df40f679495388e4" dependencies = [ - "bytes", - "derive_more", "num-bigint", "serde", "smallvec", @@ -1583,6 +1817,12 @@ dependencies = [ "digest", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -1592,6 +1832,15 @@ dependencies = [ "libc", ] +[[package]] +name = "simd-abstraction" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" +dependencies = [ + "outref", +] + [[package]] name = "simd-adler32" version = "0.3.5" @@ -1649,17 +1898,20 @@ dependencies = [ [[package]] name = "sourcemap" -version = "7.0.1" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10da010a590ed2fa9ca8467b00ce7e9c5a8017742c0c09c45450efc172208c4b" +checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" dependencies = [ + "base64-simd", + "bitvec", "data-encoding", "debugid", "if_chain", - "rustc_version 0.2.3", + "rustc-hash", + "rustc_version", "serde", "serde_json", - "unicode-id", + "unicode-id-start", "url", ] @@ -1672,6 +1924,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strict-num" version = "0.1.1" @@ -1700,7 +1958,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.18", + "syn", ] [[package]] @@ -1715,20 +1973,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.18" +version = "2.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" dependencies = [ "proc-macro2", "quote", @@ -1741,6 +1988,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "thiserror" version = "1.0.40" @@ -1758,7 +2011,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1830,7 +2083,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1841,7 +2094,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", ] [[package]] @@ -1945,10 +2198,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" [[package]] -name = "unicode-id" -version = "0.3.3" +name = "unicode-id-start" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" +checksum = "97e2a3c5fc9de285c0e805d98eba666adb4b2d9e1049ce44821ff7707cc34e91" [[package]] name = "unicode-ident" @@ -2064,14 +2317,19 @@ checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" [[package]] name = "v8" -version = "0.81.0" +version = "0.106.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75f5f378b9b54aff3b10da8170d26af4cfd217f644cf671badcd13af5db4beb" +checksum = "a381badc47c6f15acb5fe0b5b40234162349ed9d4e4fd7c83a7f5547c0fc69c5" dependencies = [ - "bitflags", + "bindgen", + "bitflags 2.6.0", "fslock", + "gzip-header", + "home", + "miniz_oxide", "once_cell", - "which", + "paste", + "which 6.0.3", ] [[package]] @@ -2116,7 +2374,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn", "wasm-bindgen-shared", ] @@ -2138,7 +2396,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2176,6 +2434,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "which" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +dependencies = [ + "either", + "home", + "rustix", + "winsafe", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2216,6 +2486,15 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.48.1" @@ -2330,6 +2609,21 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "xmlparser" version = "0.13.5" diff --git a/charming/Cargo.toml b/charming/Cargo.toml index f8889fa..aba1a25 100644 --- a/charming/Cargo.toml +++ b/charming/Cargo.toml @@ -12,14 +12,14 @@ license = "MIT/Apache-2.0" readme = "../README.md" [dependencies] -deno_core = { version = "0.232", optional = true } +deno_core = { version = "0.311", optional = true } handlebars = { version = "4.3", optional = true } image = { version = "0.24", optional = true } resvg = { version = "0.36", optional = true } serde = { version = "1.0", features = ["derive"] } serde-wasm-bindgen = {version = "0.6", optional = true } serde_json = "1.0" -serde_v8 = { version = "0.141", optional = true } +serde_v8 = { version = "0.220", optional = true } wasm-bindgen = { version = "0.2", optional = true } [dependencies.web-sys] diff --git a/charming/src/renderer/image_renderer.rs b/charming/src/renderer/image_renderer.rs index 8e8c6ae..b5175c4 100644 --- a/charming/src/renderer/image_renderer.rs +++ b/charming/src/renderer/image_renderer.rs @@ -40,15 +40,13 @@ impl ImageRenderer { runtime .execute_script( "[runtime.js]", - include_str!("../asset/runtime.js").to_string().into(), + include_str!("../asset/runtime.js").to_string(), ) .unwrap(); runtime .execute_script( "[echarts.js]", - include_str!("../asset/echarts-5.4.2.min.js") - .to_string() - .into(), + include_str!("../asset/echarts-5.4.2.min.js").to_string(), ) .unwrap(); @@ -89,7 +87,7 @@ impl ImageRenderer { }), ) .expect("Failed to render template"); - let result = self.js_runtime.execute_script("[anon]", code.into()); + let result = self.js_runtime.execute_script("[anon]", code); match result { Ok(global) => { From 69df49cfa38bab7032e259e2ad3c862f569b1c69 Mon Sep 17 00:00:00 2001 From: "am@pa.dev" Date: Mon, 9 Sep 2024 13:39:42 +0800 Subject: [PATCH 04/15] add connect_nulls to line; allow optional numeric values --- charming/src/datatype/value.rs | 10 ++++++++ charming/src/series/line.rs | 9 ++++++++ .../src/line/distribution_of_electricity.rs | 23 +++++++++++++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/charming/src/datatype/value.rs b/charming/src/datatype/value.rs index 1f0f4dd..1e690f8 100644 --- a/charming/src/datatype/value.rs +++ b/charming/src/datatype/value.rs @@ -35,6 +35,7 @@ impl From for NumericValue { #[serde(untagged)] pub enum CompositeValue { Number(NumericValue), + OptionalNumber(Option), String(String), Array(Vec), } @@ -48,6 +49,15 @@ where } } +impl From> for CompositeValue +where + N: Into, +{ + fn from(n: Option) -> Self { + CompositeValue::OptionalNumber(n.map(Into::into)) + } +} + impl From<&str> for CompositeValue { fn from(s: &str) -> Self { CompositeValue::String(s.to_string()) diff --git a/charming/src/series/line.rs b/charming/src/series/line.rs index aff6409..99f03e5 100644 --- a/charming/src/series/line.rs +++ b/charming/src/series/line.rs @@ -53,6 +53,9 @@ pub struct Line { #[serde(skip_serializing_if = "Option::is_none")] smooth: Option, + #[serde(skip_serializing_if = "Option::is_none")] + connect_nulls: Option, + #[serde(skip_serializing_if = "Option::is_none")] mark_point: Option, @@ -101,6 +104,7 @@ impl Line { item_style: None, emphasis: None, smooth: None, + connect_nulls: None, mark_point: None, mark_line: None, mark_area: None, @@ -179,6 +183,11 @@ impl Line { self } + pub fn connect_nulls(mut self, connect_nulls: bool) -> Self { + self.connect_nulls = Some(connect_nulls); + self + } + pub fn mark_point>(mut self, mark_point: M) -> Self { self.mark_point = Some(mark_point.into()); self diff --git a/gallery/src/line/distribution_of_electricity.rs b/gallery/src/line/distribution_of_electricity.rs index 1bdbafa..326a0a6 100644 --- a/gallery/src/line/distribution_of_electricity.rs +++ b/gallery/src/line/distribution_of_electricity.rs @@ -52,9 +52,28 @@ pub fn chart() -> Chart { Line::new() .name("Electricity") .smooth(0.5) + .connect_nulls(true) .data(vec![ - 300, 280, 250, 260, 270, 300, 550, 500, 400, 390, 380, 390, 400, 500, 600, 750, - 800, 700, 600, 400, + Some(300), + Some(280), + Some(250), + None, + Some(270), + Some(300), + Some(550), + Some(500), + Some(400), + Some(390), + Some(380), + Some(390), + Some(400), + Some(500), + Some(600), + Some(750), + Some(800), + Some(700), + Some(600), + Some(400), ]) .mark_area( MarkArea::new() From 7fffcb8051164bc6c085372cf9e96b5cb73721ef Mon Sep 17 00:00:00 2001 From: LukaOber Date: Mon, 16 Sep 2024 14:16:13 +0200 Subject: [PATCH 05/15] Implement Display instead of ToString for Chart --- charming/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/charming/src/lib.rs b/charming/src/lib.rs index 3045101..b420dc3 100644 --- a/charming/src/lib.rs +++ b/charming/src/lib.rs @@ -1,4 +1,3 @@ -#![allow(clippy::to_string_trait_impl)] #![cfg_attr(docsrs, feature(doc_cfg))] /*! Charming is a powerful and versatile chart rendering library for Rust that @@ -516,9 +515,13 @@ impl Chart { } } -impl ToString for Chart { - fn to_string(&self) -> String { - process_raw_strings(serde_json::to_string_pretty(self).unwrap().as_str()) +impl std::fmt::Display for Chart { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + process_raw_strings(&serde_json::to_string_pretty(self).unwrap()) + ) } } From 9356afb388f4bc785e6d9e5a17c1ff0ec591ffca Mon Sep 17 00:00:00 2001 From: yuankunzhang Date: Sun, 6 Oct 2024 10:48:30 +0800 Subject: [PATCH 06/15] Bump version to v0.4.0 --- Cargo.lock | 2 +- charming/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26e5e32..fd02d92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -332,7 +332,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charming" -version = "0.3.1" +version = "0.4.0" dependencies = [ "deno_core", "handlebars", diff --git a/charming/Cargo.toml b/charming/Cargo.toml index aba1a25..0678210 100644 --- a/charming/Cargo.toml +++ b/charming/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "charming" description = "A visualization library for Rust" -version = "0.3.1" +version = "0.4.0" edition = "2021" authors = ["Yuankun Zhang "] repository = "https://github.com/yuankunzhang/charming" From e2dbc2c54840616b56faab2b0d3c7a3787d54e5e Mon Sep 17 00:00:00 2001 From: mbn-gy Date: Sun, 6 Oct 2024 23:42:00 +0800 Subject: [PATCH 07/15] add symbol callback --- charming/src/element/symbol.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/charming/src/element/symbol.rs b/charming/src/element/symbol.rs index 7451b6b..c0061fd 100644 --- a/charming/src/element/symbol.rs +++ b/charming/src/element/symbol.rs @@ -1,5 +1,7 @@ use serde::Serialize; +use super::RawString; + pub enum Symbol { Circle, Rect, @@ -10,6 +12,7 @@ pub enum Symbol { Arrow, None, Custom(String), + Callback(RawString), } impl Serialize for Symbol { @@ -24,6 +27,7 @@ impl Serialize for Symbol { Symbol::Arrow => serializer.serialize_str("arrow"), Symbol::None => serializer.serialize_str("none"), Symbol::Custom(s) => serializer.serialize_str(s), + Symbol::Callback(s) => s.serialize(serializer), } } } From 62fc603470fb8877bec9285998b081539c58d96f Mon Sep 17 00:00:00 2001 From: mbn-gy Date: Mon, 7 Oct 2024 10:13:52 +0800 Subject: [PATCH 08/15] add callback symbol example to gallery --- gallery/src/lib.rs | 1 + gallery/src/line/different_symbols.rs | 19 +++++++++++++++++++ gallery/src/line/mod.rs | 1 + 3 files changed, 21 insertions(+) create mode 100644 gallery/src/line/different_symbols.rs diff --git a/gallery/src/lib.rs b/gallery/src/lib.rs index b05114a..76b4f78 100644 --- a/gallery/src/lib.rs +++ b/gallery/src/lib.rs @@ -110,6 +110,7 @@ lazy_static! { insert!(m, line, area_pieces); insert!(m, line, basic_area); insert!(m, line, basic_line); + insert!(m, line, different_symbols); insert!(m, line, confidence_band); insert!(m, line, data_transform_filter); insert!(m, line, distribution_of_electricity); diff --git a/gallery/src/line/different_symbols.rs b/gallery/src/line/different_symbols.rs new file mode 100644 index 0000000..435dc84 --- /dev/null +++ b/gallery/src/line/different_symbols.rs @@ -0,0 +1,19 @@ +use charming::{ + component::Axis, + element::{AxisType, Symbol}, + series::Line, + Chart, +}; + +pub fn chart() -> Chart { + Chart::new() + .x_axis( + Axis::new() + .type_(AxisType::Category) + .data(vec!["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]), + ) + .y_axis(Axis::new().type_(AxisType::Value)) + .series(Line::new().data(vec![150, 230, 224, 218, 135, 147, 260]) + .symbol_size(20) + .symbol(Symbol::Callback("function (value, params) { return params.dataIndex % 2 === 0 ? value > 200 ? 'diamond' : 'circle' : 'triangle'; }".into()))) +} diff --git a/gallery/src/line/mod.rs b/gallery/src/line/mod.rs index 740f712..12d3bdd 100644 --- a/gallery/src/line/mod.rs +++ b/gallery/src/line/mod.rs @@ -3,6 +3,7 @@ pub mod basic_area; pub mod basic_line; pub mod confidence_band; pub mod data_transform_filter; +pub mod different_symbols; pub mod distribution_of_electricity; pub mod gradient_stacked_area; pub mod large_scale_area; From ebd3116825fd6c62dad443b79bc71688e54259ba Mon Sep 17 00:00:00 2001 From: "am@pa.dev" Date: Fri, 6 Sep 2024 16:15:03 +0800 Subject: [PATCH 09/15] add selected to legend --- charming/src/component/legend.rs | 14 ++++++++++++++ gallery/src/line/stacked_line.rs | 25 ++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/charming/src/component/legend.rs b/charming/src/component/legend.rs index 5ab8788..3ef84d0 100644 --- a/charming/src/component/legend.rs +++ b/charming/src/component/legend.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use serde::Serialize; use crate::{ @@ -158,6 +160,9 @@ pub struct Legend { #[serde(skip_serializing_if = "Option::is_none")] formatter: Option, + #[serde(skip_serializing_if = "Option::is_none")] + selected: Option>, + #[serde(skip_serializing_if = "Option::is_none")] selected_mode: Option, @@ -202,6 +207,7 @@ impl Legend { text_style: None, symbol_rotate: None, formatter: None, + selected: None, selected_mode: None, border_color: None, inactive_color: None, @@ -314,6 +320,14 @@ impl Legend { self } + pub fn selected, I: IntoIterator>( + mut self, + selected: I, + ) -> Self { + self.selected = Some(selected.into_iter().map(|(k, v)| (k.into(), v)).collect()); + self + } + pub fn selected_mode>(mut self, selected_mode: S) -> Self { self.selected_mode = Some(selected_mode.into()); self diff --git a/gallery/src/line/stacked_line.rs b/gallery/src/line/stacked_line.rs index d60a6ae..5eb5068 100644 --- a/gallery/src/line/stacked_line.rs +++ b/gallery/src/line/stacked_line.rs @@ -9,13 +9,18 @@ pub fn chart() -> Chart { Chart::new() .title(Title::new().text("Stacked Line")) .tooltip(Tooltip::new().trigger(Trigger::Axis)) - .legend(Legend::new().data(vec![ - "Email", - "Union Ads", - "Video Ads", - "Direct", - "Search Engine", - ])) + .legend( + Legend::new() + .data(vec![ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", + "Affiliate Marketing", + ]) + .selected([("Affiliate Marketing", false)]), + ) .grid( Grid::new() .left("3%") @@ -61,4 +66,10 @@ pub fn chart() -> Chart { .stack("Total") .data(vec![820, 932, 901, 934, 1290, 1330, 1320]), ) + .series( + Line::new() + .name("Affiliate Marketing") + .stack("Total") + .data(vec![180, 232, 210, 290, 250, 400, 370]), + ) } From e8370247c3b32cabfc08720e679f574be691214a Mon Sep 17 00:00:00 2001 From: LukaOber Date: Fri, 4 Oct 2024 17:21:12 +0200 Subject: [PATCH 10/15] add useful derive traits --- charming/src/component/angle_axis.rs | 2 +- charming/src/component/aria.rs | 6 ++--- charming/src/component/axis.rs | 2 +- charming/src/component/axis3d.rs | 2 +- charming/src/component/data_zoom.rs | 6 ++--- charming/src/component/geo_map.rs | 4 ++-- charming/src/component/grid.rs | 4 ++-- charming/src/component/grid3d.rs | 2 +- charming/src/component/legend.rs | 8 +++---- charming/src/component/parallel_axis.rs | 2 +- charming/src/component/parallel_coordinate.rs | 4 ++-- charming/src/component/polar_coordinate.rs | 2 +- charming/src/component/radar_coordinate.rs | 6 ++--- charming/src/component/radius_axis.rs | 2 +- charming/src/component/single_axis.rs | 4 ++-- charming/src/component/title.rs | 2 +- charming/src/component/toolbox.rs | 22 +++++++++---------- charming/src/component/visual_map.rs | 8 +++---- charming/src/datatype/datapoint.rs | 4 ++-- charming/src/datatype/dataset.rs | 5 +++-- charming/src/datatype/dimension.rs | 4 ++-- charming/src/element/anchor.rs | 2 +- charming/src/element/area_style.rs | 4 ++-- charming/src/element/axis_label.rs | 2 +- charming/src/element/axis_line.rs | 5 +++-- charming/src/element/axis_pointer.rs | 8 +++---- charming/src/element/axis_tick.rs | 2 +- charming/src/element/axis_type.rs | 2 +- charming/src/element/background.rs | 4 ++-- charming/src/element/blur.rs | 2 +- charming/src/element/border_type.rs | 2 +- charming/src/element/boundary_gap.rs | 1 + charming/src/element/color.rs | 6 ++--- charming/src/element/coordinate.rs | 2 +- charming/src/element/cursor.rs | 2 +- charming/src/element/dimension_encode.rs | 2 +- charming/src/element/emphasis.rs | 4 ++-- charming/src/element/formatter.rs | 2 +- charming/src/element/icon.rs | 1 + charming/src/element/item_style.rs | 2 +- charming/src/element/label.rs | 12 +++++----- charming/src/element/line_style.rs | 4 ++-- charming/src/element/link_target.rs | 2 +- charming/src/element/mark_area.rs | 4 ++-- charming/src/element/mark_line.rs | 7 +++--- charming/src/element/mark_point.rs | 6 ++--- charming/src/element/minor_split_line.rs | 2 +- charming/src/element/minor_tick.rs | 2 +- charming/src/element/name_location.rs | 2 +- charming/src/element/orient.rs | 2 +- charming/src/element/padding.rs | 1 + charming/src/element/parallel_layout.rs | 2 +- charming/src/element/pointer.rs | 2 +- charming/src/element/raw_string.rs | 2 +- charming/src/element/scale_limit.rs | 2 +- charming/src/element/select.rs | 2 +- charming/src/element/shape.rs | 2 +- charming/src/element/sort.rs | 1 + charming/src/element/split_area.rs | 2 +- charming/src/element/split_line.rs | 2 +- charming/src/element/symbol.rs | 1 + charming/src/element/symbol_size.rs | 2 +- charming/src/element/text_align.rs | 4 ++-- charming/src/element/text_style.rs | 2 +- charming/src/element/tooltip.rs | 6 ++--- charming/src/lib.rs | 2 +- charming/src/series/bar.rs | 2 +- charming/src/series/bar3d.rs | 2 +- charming/src/series/boxplot.rs | 2 +- charming/src/series/candlestick.rs | 2 +- charming/src/series/custom.rs | 2 +- charming/src/series/effect_scatter.rs | 10 ++++----- charming/src/series/funnel.rs | 4 ++-- charming/src/series/gauge.rs | 8 +++---- charming/src/series/graph.rs | 18 +++++++-------- charming/src/series/heatmap.rs | 2 +- charming/src/series/line.rs | 2 +- charming/src/series/map.rs | 2 +- charming/src/series/mod.rs | 1 + charming/src/series/parallel.rs | 4 ++-- charming/src/series/pictorial_bar.rs | 2 +- charming/src/series/pie.rs | 4 ++-- charming/src/series/radar.rs | 2 +- charming/src/series/sankey.rs | 8 +++---- charming/src/series/scatter.rs | 2 +- charming/src/series/sunburst.rs | 6 ++--- charming/src/series/theme_river.rs | 3 ++- charming/src/series/tree.rs | 12 +++++----- charming/src/series/treemap.rs | 2 +- 89 files changed, 173 insertions(+), 163 deletions(-) diff --git a/charming/src/component/angle_axis.rs b/charming/src/component/angle_axis.rs index ae29f68..a4ada04 100644 --- a/charming/src/component/angle_axis.rs +++ b/charming/src/component/angle_axis.rs @@ -6,7 +6,7 @@ use crate::element::{ }; /// The angle axis in Polar Coordinate. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AngleAxis { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/aria.rs b/charming/src/component/aria.rs index 67ab4f9..b0f3e5d 100644 --- a/charming/src/component/aria.rs +++ b/charming/src/component/aria.rs @@ -8,7 +8,7 @@ use crate::{ /** A single decal pattern. */ -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DecalItem { /// The symbol type of the decal. @@ -132,7 +132,7 @@ impl DecalItem { /** Decal patterns to be applied to series data. */ -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Decal { /// Whether to show decal patterns. If `decals` is not set, this option is @@ -202,7 +202,7 @@ Chart::new() .series(Bar::new().data(vec![140, 230, 120, 50, 30, 150, 120])); ``` */ -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Aria { /// Whether to enable WAI-ARIA. diff --git a/charming/src/component/axis.rs b/charming/src/component/axis.rs index 7894529..f7d5448 100644 --- a/charming/src/component/axis.rs +++ b/charming/src/component/axis.rs @@ -9,7 +9,7 @@ use crate::{ }; /// Axis in cartesian coordinate. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Axis { /// Type of axis. diff --git a/charming/src/component/axis3d.rs b/charming/src/component/axis3d.rs index 4a20cd8..d9d86d8 100644 --- a/charming/src/component/axis3d.rs +++ b/charming/src/component/axis3d.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::element::AxisType; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Axis3D { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/data_zoom.rs b/charming/src/component/data_zoom.rs index ece1d00..0041b29 100644 --- a/charming/src/component/data_zoom.rs +++ b/charming/src/component/data_zoom.rs @@ -5,7 +5,7 @@ use crate::{ element::{Color, DataBackground, Orient, TextStyle}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub enum FilterMode { Filter, @@ -14,7 +14,7 @@ pub enum FilterMode { None, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum DataZoomType { Inside, @@ -25,7 +25,7 @@ pub enum DataZoomType { /// DataZoom component is used for zooming a specific area, which enables user /// to investigate data in detail, or get an overview of the data, or get rid /// of outlier points. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DataZoom { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/geo_map.rs b/charming/src/component/geo_map.rs index 3c409fe..4a070c0 100644 --- a/charming/src/component/geo_map.rs +++ b/charming/src/component/geo_map.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, Clone)] pub enum GeoMapOpt { #[serde(rename = "geoJSON")] GeoJson { @@ -20,7 +20,7 @@ where } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct GeoMap { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/grid.rs b/charming/src/component/grid.rs index 4f4d551..469138a 100644 --- a/charming/src/component/grid.rs +++ b/charming/src/component/grid.rs @@ -5,7 +5,7 @@ use crate::{ element::{Color, Padding, TextStyle, Trigger}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GridTooltip { /// Whether to show the tooltip component. @@ -133,7 +133,7 @@ impl GridTooltip { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Grid { /// Component ID. diff --git a/charming/src/component/grid3d.rs b/charming/src/component/grid3d.rs index eb6ed04..5003e13 100644 --- a/charming/src/component/grid3d.rs +++ b/charming/src/component/grid3d.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Grid3D {} diff --git a/charming/src/component/legend.rs b/charming/src/component/legend.rs index 3ef84d0..26bb2b3 100644 --- a/charming/src/component/legend.rs +++ b/charming/src/component/legend.rs @@ -7,7 +7,7 @@ use crate::{ element::{Color, Icon, ItemStyle, LabelAlign, LineStyle, Orient, Padding, TextStyle}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LegendType { /// Simple legend. @@ -17,7 +17,7 @@ pub enum LegendType { Scroll, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LegendSelectedMode { /// Multiple selection. @@ -27,7 +27,7 @@ pub enum LegendSelectedMode { Single, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct LegendItem { pub name: String, @@ -69,7 +69,7 @@ impl From<(String, String)> for LegendItem { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Legend { /// Type of legend. diff --git a/charming/src/component/parallel_axis.rs b/charming/src/component/parallel_axis.rs index f43f1f9..dd925d4 100644 --- a/charming/src/component/parallel_axis.rs +++ b/charming/src/component/parallel_axis.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::element::{AxisType, NameLocation}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ParallelAxis { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/parallel_coordinate.rs b/charming/src/component/parallel_coordinate.rs index e1408e7..cff4330 100644 --- a/charming/src/component/parallel_coordinate.rs +++ b/charming/src/component/parallel_coordinate.rs @@ -8,7 +8,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ParallelAxisDefault { #[serde(skip_serializing_if = "Option::is_none")] @@ -233,7 +233,7 @@ impl ParallelAxisDefault { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ParallelCoordinate { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/polar_coordinate.rs b/charming/src/component/polar_coordinate.rs index af91677..e73de56 100644 --- a/charming/src/component/polar_coordinate.rs +++ b/charming/src/component/polar_coordinate.rs @@ -3,7 +3,7 @@ use serde::Serialize; use crate::datatype::CompositeValue; /// Polar coordinate can be used in scatter and line chart. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct PolarCoordinate { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/radar_coordinate.rs b/charming/src/component/radar_coordinate.rs index f1a911b..86ad5b9 100644 --- a/charming/src/component/radar_coordinate.rs +++ b/charming/src/component/radar_coordinate.rs @@ -8,7 +8,7 @@ use crate::{ }; /// Name options for radar indicators. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct RadarAxisName { /// Whether to display the indicator's name. @@ -297,7 +297,7 @@ impl RadarAxisName { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct RadarIndicator { #[serde(skip_serializing_if = "Option::is_none")] @@ -372,7 +372,7 @@ impl From<(&str, i64, i64)> for RadarIndicator { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct RadarCoordinate { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/radius_axis.rs b/charming/src/component/radius_axis.rs index 8469e84..aa7ec7d 100644 --- a/charming/src/component/radius_axis.rs +++ b/charming/src/component/radius_axis.rs @@ -3,7 +3,7 @@ use serde::Serialize; use crate::element::{AxisLabel, AxisLine, AxisType, BoundaryGap, NameLocation, TextStyle}; /// Radius axis in polar coordinate. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct RadiusAxis { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/single_axis.rs b/charming/src/component/single_axis.rs index d4be86d..2b10183 100644 --- a/charming/src/component/single_axis.rs +++ b/charming/src/component/single_axis.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::{datatype::CompositeValue, element::Orient}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Type { Value, @@ -11,7 +11,7 @@ pub enum Type { Log, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SingleAxis { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/title.rs b/charming/src/component/title.rs index 9ab3a1d..149af95 100644 --- a/charming/src/component/title.rs +++ b/charming/src/component/title.rs @@ -6,7 +6,7 @@ use crate::{ }; /// Title component, including main title and subtitle. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Title { /// Component ID. diff --git a/charming/src/component/toolbox.rs b/charming/src/component/toolbox.rs index 6010e40..4455dc0 100644 --- a/charming/src/component/toolbox.rs +++ b/charming/src/component/toolbox.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::{datatype::CompositeValue, element::Orient}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum SaveAsImageType { Png, @@ -10,7 +10,7 @@ pub enum SaveAsImageType { Svg, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SaveAsImage { #[serde(skip_serializing_if = "Option::is_none")] @@ -64,7 +64,7 @@ impl SaveAsImage { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Restore { #[serde(skip_serializing_if = "Option::is_none")] @@ -99,7 +99,7 @@ impl Restore { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DataView { #[serde(skip_serializing_if = "Option::is_none")] @@ -143,7 +143,7 @@ impl DataView { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum MagicTypeType { /// For line charts. @@ -165,7 +165,7 @@ impl From<&str> for MagicTypeType { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MagicType { #[serde(skip_serializing_if = "Option::is_none")] @@ -200,7 +200,7 @@ impl MagicType { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub enum BrushType { Rect, @@ -211,7 +211,7 @@ pub enum BrushType { Clear, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Brush { #[serde(skip_serializing_if = "Vec::is_empty")] @@ -235,7 +235,7 @@ impl Brush { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ToolboxDataZoom { #[serde(skip_serializing_if = "Option::is_none")] @@ -259,7 +259,7 @@ impl ToolboxDataZoom { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Feature { #[serde(skip_serializing_if = "Option::is_none")] @@ -330,7 +330,7 @@ impl Feature { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Toolbox { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/component/visual_map.rs b/charming/src/component/visual_map.rs index 5a78481..f0ef4f1 100644 --- a/charming/src/component/visual_map.rs +++ b/charming/src/component/visual_map.rs @@ -5,14 +5,14 @@ use crate::{ element::{Color, Orient, TextStyle}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum VisualMapType { Continuous, Piecewise, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct VisualMapPiece { #[serde(skip_serializing_if = "Option::is_none")] @@ -125,7 +125,7 @@ impl From<(i64, i64, &str)> for VisualMapPiece { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct VisualMapChannel { #[serde(skip_serializing_if = "Vec::is_empty")] @@ -149,7 +149,7 @@ impl VisualMapChannel { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct VisualMap { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/datatype/datapoint.rs b/charming/src/datatype/datapoint.rs index 4006e75..c35ec5e 100644 --- a/charming/src/datatype/datapoint.rs +++ b/charming/src/datatype/datapoint.rs @@ -6,7 +6,7 @@ use crate::element::ItemStyle; use super::CompositeValue; -#[derive(Serialize)] +#[derive(Serialize, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DataPointItem { value: CompositeValue, @@ -72,7 +72,7 @@ where } } -#[derive(Debug, PartialEq, Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(untagged)] pub enum DataPoint { Value(CompositeValue), diff --git a/charming/src/datatype/dataset.rs b/charming/src/datatype/dataset.rs index 7bc2637..b63ccb2 100644 --- a/charming/src/datatype/dataset.rs +++ b/charming/src/datatype/dataset.rs @@ -4,7 +4,7 @@ use crate::element::RawString; use super::{DataSource, Dimension}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] pub struct Source { source: DataSource, @@ -62,7 +62,7 @@ where } } -#[derive(Debug, Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Transform { #[serde(skip_serializing_if = "Option::is_none")] @@ -130,6 +130,7 @@ impl From<&str> for Transform { } } +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub struct Dataset { sources: Vec, transforms: Vec, diff --git a/charming/src/datatype/dimension.rs b/charming/src/datatype/dimension.rs index a4ef3fd..7050cb8 100644 --- a/charming/src/datatype/dimension.rs +++ b/charming/src/datatype/dimension.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(untagged)] pub enum DimensionType { Number, @@ -23,7 +23,7 @@ impl From<&str> for DimensionType { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Dimension { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/anchor.rs b/charming/src/element/anchor.rs index ce3e06f..a79dfe7 100644 --- a/charming/src/element/anchor.rs +++ b/charming/src/element/anchor.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{icon::Icon, item_style::ItemStyle}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Anchor { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/area_style.rs b/charming/src/element/area_style.rs index 2fedab0..fba5691 100644 --- a/charming/src/element/area_style.rs +++ b/charming/src/element/area_style.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::color::Color; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum OriginPosition { Auto, @@ -10,7 +10,7 @@ pub enum OriginPosition { End, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AreaStyle { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/axis_label.rs b/charming/src/element/axis_label.rs index 9d2c4ba..5f2d4fd 100644 --- a/charming/src/element/axis_label.rs +++ b/charming/src/element/axis_label.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{color::Color, Formatter}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisLabel { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/axis_line.rs b/charming/src/element/axis_line.rs index 138f2a4..15fa214 100644 --- a/charming/src/element/axis_line.rs +++ b/charming/src/element/axis_line.rs @@ -2,6 +2,7 @@ use serde::{ser::SerializeSeq, Serialize}; use super::color::Color; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub struct ColorSegment(f64, Color); impl Serialize for ColorSegment { @@ -25,7 +26,7 @@ impl From<(f64, Color)> for ColorSegment { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisLineStyle { color: Vec, @@ -116,7 +117,7 @@ impl From<(f64, &str, f64)> for AxisLineStyle { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisLine { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/axis_pointer.rs b/charming/src/element/axis_pointer.rs index b4607a4..32a4861 100644 --- a/charming/src/element/axis_pointer.rs +++ b/charming/src/element/axis_pointer.rs @@ -5,7 +5,7 @@ use crate::{ element::{Label, LineStyle}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum AxisPointerType { Line, @@ -14,7 +14,7 @@ pub enum AxisPointerType { None, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum AxisPointerAxis { X, @@ -23,7 +23,7 @@ pub enum AxisPointerAxis { Angle, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisPointerLink { #[serde(skip_serializing_if = "Option::is_none")] @@ -78,7 +78,7 @@ impl AxisPointerLink { /// Axis Pointer is a tool for displaying reference line and axis value under /// mouse pointer. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisPointer { /// Component ID. diff --git a/charming/src/element/axis_tick.rs b/charming/src/element/axis_tick.rs index c7309b7..e121562 100644 --- a/charming/src/element/axis_tick.rs +++ b/charming/src/element/axis_tick.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::line_style::LineStyle; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct AxisTick { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/axis_type.rs b/charming/src/element/axis_type.rs index 1586c06..7fdbeb7 100644 --- a/charming/src/element/axis_type.rs +++ b/charming/src/element/axis_type.rs @@ -1,7 +1,7 @@ use serde::Serialize; /// Type of axis. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum AxisType { /// Numerical axis, suitable for continuous data. diff --git a/charming/src/element/background.rs b/charming/src/element/background.rs index 213acac..41148a9 100644 --- a/charming/src/element/background.rs +++ b/charming/src/element/background.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{area_style::AreaStyle, border_type::BorderType, color::Color, line_style::LineStyle}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct BackgroundStyle { #[serde(skip_serializing_if = "Option::is_none")] @@ -73,7 +73,7 @@ impl BackgroundStyle { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DataBackground { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/blur.rs b/charming/src/element/blur.rs index b56a9b1..86984a3 100644 --- a/charming/src/element/blur.rs +++ b/charming/src/element/blur.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{item_style::ItemStyle, label::Label}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Blur { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/border_type.rs b/charming/src/element/border_type.rs index 051a9ae..8a6290f 100644 --- a/charming/src/element/border_type.rs +++ b/charming/src/element/border_type.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum BorderType { Solid, diff --git a/charming/src/element/boundary_gap.rs b/charming/src/element/boundary_gap.rs index a8f31ae..e8f7d4c 100644 --- a/charming/src/element/boundary_gap.rs +++ b/charming/src/element/boundary_gap.rs @@ -9,6 +9,7 @@ use serde::{ser::SerializeSeq, Serialize}; /// For non-category axis, including time, numerical value, and log axes, /// `BoundaryGap` is an array of two values, representing the spanning range /// between minimum and maximum value. +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum BoundaryGap { CategoryAxis(bool), NonCategoryAxis(String, String), diff --git a/charming/src/element/color.rs b/charming/src/element/color.rs index e0ad8cd..402e83d 100644 --- a/charming/src/element/color.rs +++ b/charming/src/element/color.rs @@ -1,7 +1,7 @@ use serde::ser::{SerializeStruct, Serializer}; use serde::{Deserialize, Serialize}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum ColorBy { Series, @@ -18,7 +18,7 @@ impl From<&str> for ColorBy { } } -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] pub struct ColorStop { offset: f64, color: String, @@ -33,7 +33,7 @@ impl ColorStop { } } -#[derive(Clone, Deserialize, Debug)] +#[derive(Deserialize, Debug, PartialEq, PartialOrd, Clone)] pub enum Color { Value(String), LinearGradient { diff --git a/charming/src/element/coordinate.rs b/charming/src/element/coordinate.rs index f12a004..ab54301 100644 --- a/charming/src/element/coordinate.rs +++ b/charming/src/element/coordinate.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum CoordinateSystem { Cartesian2d, diff --git a/charming/src/element/cursor.rs b/charming/src/element/cursor.rs index a18d517..bd48b8c 100644 --- a/charming/src/element/cursor.rs +++ b/charming/src/element/cursor.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Cursor { Pointer, diff --git a/charming/src/element/dimension_encode.rs b/charming/src/element/dimension_encode.rs index 62fd370..b55de22 100644 --- a/charming/src/element/dimension_encode.rs +++ b/charming/src/element/dimension_encode.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::datatype::CompositeValue; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct DimensionEncode { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/emphasis.rs b/charming/src/element/emphasis.rs index 05292e5..da6ee98 100644 --- a/charming/src/element/emphasis.rs +++ b/charming/src/element/emphasis.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{item_style::ItemStyle, AreaStyle, Label}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum EmphasisFocus { None, @@ -15,7 +15,7 @@ pub enum EmphasisFocus { Adjacency, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Emphasis { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/formatter.rs b/charming/src/element/formatter.rs index 3b55904..cce51b6 100644 --- a/charming/src/element/formatter.rs +++ b/charming/src/element/formatter.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::RawString; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(untagged)] pub enum Formatter { String(String), diff --git a/charming/src/element/icon.rs b/charming/src/element/icon.rs index 146e338..0275125 100644 --- a/charming/src/element/icon.rs +++ b/charming/src/element/icon.rs @@ -1,5 +1,6 @@ use serde::Serialize; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Icon { Circle, Rect, diff --git a/charming/src/element/item_style.rs b/charming/src/element/item_style.rs index 8b5eb97..56d5536 100644 --- a/charming/src/element/item_style.rs +++ b/charming/src/element/item_style.rs @@ -1,7 +1,7 @@ use super::{border_type::BorderType, color::Color}; use serde::{Deserialize, Serialize}; -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ItemStyle { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/label.rs b/charming/src/element/label.rs index 240aed6..fcfe63d 100644 --- a/charming/src/element/label.rs +++ b/charming/src/element/label.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{color::Color, line_style::LineStyle, Formatter}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub enum LabelPosition { Top, @@ -24,7 +24,7 @@ pub enum LabelPosition { Center, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LabelAlign { Left, @@ -32,7 +32,7 @@ pub enum LabelAlign { Right, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LabelVerticalAlign { Top, @@ -40,7 +40,7 @@ pub enum LabelVerticalAlign { Bottom, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Label { #[serde(skip_serializing_if = "Option::is_none")] @@ -233,7 +233,7 @@ impl Label { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct LabelLine { #[serde(skip_serializing_if = "Option::is_none")] @@ -304,7 +304,7 @@ impl LabelLine { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct LabelLayout { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/line_style.rs b/charming/src/element/line_style.rs index 82c1fe1..55df743 100644 --- a/charming/src/element/line_style.rs +++ b/charming/src/element/line_style.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::color::Color; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LineStyleType { Solid, @@ -10,7 +10,7 @@ pub enum LineStyleType { Dotted, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct LineStyle { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/link_target.rs b/charming/src/element/link_target.rs index bc7e33c..c67bce7 100644 --- a/charming/src/element/link_target.rs +++ b/charming/src/element/link_target.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum LinkTarget { #[serde(rename = "self")] diff --git a/charming/src/element/mark_area.rs b/charming/src/element/mark_area.rs index a4e47a4..54c8cf8 100644 --- a/charming/src/element/mark_area.rs +++ b/charming/src/element/mark_area.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{blur::Blur, emphasis::Emphasis, item_style::ItemStyle, label::Label}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkAreaData { #[serde(skip_serializing_if = "Option::is_none")] @@ -46,7 +46,7 @@ impl MarkAreaData { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkArea { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/mark_line.rs b/charming/src/element/mark_line.rs index 86c511e..8ed0401 100644 --- a/charming/src/element/mark_line.rs +++ b/charming/src/element/mark_line.rs @@ -4,7 +4,7 @@ use crate::datatype::CompositeValue; use super::{label::Label, line_style::LineStyle, symbol::Symbol}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum MarkLineDataType { Min, @@ -25,7 +25,7 @@ impl From<&str> for MarkLineDataType { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkLineData { #[serde(skip_serializing_if = "Option::is_none")] @@ -130,6 +130,7 @@ impl From<(&str, &str)> for MarkLineData { } } +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum MarkLineVariant { Simple(MarkLineData), StartToEnd(MarkLineData, MarkLineData), @@ -149,7 +150,7 @@ impl Serialize for MarkLineVariant { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkLine { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/mark_point.rs b/charming/src/element/mark_point.rs index e4fcc5a..4c296c7 100644 --- a/charming/src/element/mark_point.rs +++ b/charming/src/element/mark_point.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum MarkPointDataType { Min, @@ -19,7 +19,7 @@ impl From<&str> for MarkPointDataType { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkPointData { #[serde(skip_serializing_if = "Option::is_none")] @@ -88,7 +88,7 @@ impl From<(&str, &str)> for MarkPointData { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MarkPoint { #[serde(skip_serializing_if = "Vec::is_empty")] diff --git a/charming/src/element/minor_split_line.rs b/charming/src/element/minor_split_line.rs index aecc59a..fc98bee 100644 --- a/charming/src/element/minor_split_line.rs +++ b/charming/src/element/minor_split_line.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::line_style::LineStyle; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MinorSplitLine { show: Option, diff --git a/charming/src/element/minor_tick.rs b/charming/src/element/minor_tick.rs index 9972ec1..bb2bdde 100644 --- a/charming/src/element/minor_tick.rs +++ b/charming/src/element/minor_tick.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::line_style::LineStyle; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct MinorTick { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/name_location.rs b/charming/src/element/name_location.rs index 4b07bbc..3baf270 100644 --- a/charming/src/element/name_location.rs +++ b/charming/src/element/name_location.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum NameLocation { Start, diff --git a/charming/src/element/orient.rs b/charming/src/element/orient.rs index 84895f6..6867ec5 100644 --- a/charming/src/element/orient.rs +++ b/charming/src/element/orient.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Orient { Horizontal, diff --git a/charming/src/element/padding.rs b/charming/src/element/padding.rs index 2adaed6..4b46833 100644 --- a/charming/src/element/padding.rs +++ b/charming/src/element/padding.rs @@ -1,6 +1,7 @@ use serde::{ser::SerializeSeq, Serialize}; /// Padding space around content. +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Padding { /// Set padding of all sides. Single(f64), diff --git a/charming/src/element/parallel_layout.rs b/charming/src/element/parallel_layout.rs index afe75cd..e7aad97 100644 --- a/charming/src/element/parallel_layout.rs +++ b/charming/src/element/parallel_layout.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum ParallelLayout { Horizontal, diff --git a/charming/src/element/pointer.rs b/charming/src/element/pointer.rs index cc6cab5..e5bce52 100644 --- a/charming/src/element/pointer.rs +++ b/charming/src/element/pointer.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{icon::Icon, item_style::ItemStyle}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Pointer { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/raw_string.rs b/charming/src/element/raw_string.rs index 18210f6..4fe631f 100644 --- a/charming/src/element/raw_string.rs +++ b/charming/src/element/raw_string.rs @@ -2,7 +2,7 @@ use serde::Serialize; pub static RAW_MARK: &str = "#*#*#*#"; -#[derive(Debug)] +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub struct RawString(String); impl Serialize for RawString { diff --git a/charming/src/element/scale_limit.rs b/charming/src/element/scale_limit.rs index b145355..7a9031e 100644 --- a/charming/src/element/scale_limit.rs +++ b/charming/src/element/scale_limit.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ScaleLimit { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/select.rs b/charming/src/element/select.rs index e6b435f..703f894 100644 --- a/charming/src/element/select.rs +++ b/charming/src/element/select.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::{item_style::ItemStyle, label::Label}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Select { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/shape.rs b/charming/src/element/shape.rs index b581397..f86d24f 100644 --- a/charming/src/element/shape.rs +++ b/charming/src/element/shape.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Shape { Polygon, diff --git a/charming/src/element/sort.rs b/charming/src/element/sort.rs index a56ddad..6f2589d 100644 --- a/charming/src/element/sort.rs +++ b/charming/src/element/sort.rs @@ -1,5 +1,6 @@ use serde::Serialize; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Sort { Ascending, Descending, diff --git a/charming/src/element/split_area.rs b/charming/src/element/split_area.rs index 95f487d..999b514 100644 --- a/charming/src/element/split_area.rs +++ b/charming/src/element/split_area.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SplitArea { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/split_line.rs b/charming/src/element/split_line.rs index 66455f7..db1a804 100644 --- a/charming/src/element/split_line.rs +++ b/charming/src/element/split_line.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::line_style::LineStyle; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SplitLine { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/symbol.rs b/charming/src/element/symbol.rs index 7451b6b..ec37005 100644 --- a/charming/src/element/symbol.rs +++ b/charming/src/element/symbol.rs @@ -1,5 +1,6 @@ use serde::Serialize; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Symbol { Circle, Rect, diff --git a/charming/src/element/symbol_size.rs b/charming/src/element/symbol_size.rs index 242c72a..f896dab 100644 --- a/charming/src/element/symbol_size.rs +++ b/charming/src/element/symbol_size.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::RawString; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(untagged)] pub enum SymbolSize { Number(f64), diff --git a/charming/src/element/text_align.rs b/charming/src/element/text_align.rs index cd636a7..e628b61 100644 --- a/charming/src/element/text_align.rs +++ b/charming/src/element/text_align.rs @@ -1,6 +1,6 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum TextAlign { Auto, @@ -9,7 +9,7 @@ pub enum TextAlign { Center, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum TextVerticalAlign { Auto, diff --git a/charming/src/element/text_style.rs b/charming/src/element/text_style.rs index 78dd854..974254c 100644 --- a/charming/src/element/text_style.rs +++ b/charming/src/element/text_style.rs @@ -2,7 +2,7 @@ use serde::Serialize; use super::color::Color; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct TextStyle { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/element/tooltip.rs b/charming/src/element/tooltip.rs index 7102386..f1237cf 100644 --- a/charming/src/element/tooltip.rs +++ b/charming/src/element/tooltip.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::element::{AxisPointer, Color, Formatter, Padding}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum TriggerOn { Mousemove, @@ -13,7 +13,7 @@ pub enum TriggerOn { } /// Types of triggering. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Trigger { Item, @@ -21,7 +21,7 @@ pub enum Trigger { None, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Tooltip { #[serde(skip_serializing_if = "Option::is_none")] diff --git a/charming/src/lib.rs b/charming/src/lib.rs index b420dc3..4c518ab 100644 --- a/charming/src/lib.rs +++ b/charming/src/lib.rs @@ -236,7 +236,7 @@ mouse pointer. [`Toolbox`] is a feature toolbox that includes data view, save as image, data zoom, restore, and reset. */ -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct Chart { #[serde(skip_serializing_if = "Vec::is_empty")] diff --git a/charming/src/series/bar.rs b/charming/src/series/bar.rs index 3013f58..a07d946 100644 --- a/charming/src/series/bar.rs +++ b/charming/src/series/bar.rs @@ -7,7 +7,7 @@ use crate::{ element::{BackgroundStyle, ColorBy, CoordinateSystem, Emphasis, ItemStyle, Label, MarkLine}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Bar { #[serde(rename = "type")] diff --git a/charming/src/series/bar3d.rs b/charming/src/series/bar3d.rs index 82597fd..f453389 100644 --- a/charming/src/series/bar3d.rs +++ b/charming/src/series/bar3d.rs @@ -5,7 +5,7 @@ use crate::{ element::{CoordinateSystem, DimensionEncode}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] pub struct Bar3d { #[serde(rename = "type")] type_: String, diff --git a/charming/src/series/boxplot.rs b/charming/src/series/boxplot.rs index ee36ae0..ba47488 100644 --- a/charming/src/series/boxplot.rs +++ b/charming/src/series/boxplot.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::element::{ColorBy, CoordinateSystem}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Boxplot { #[serde(rename = "type")] diff --git a/charming/src/series/candlestick.rs b/charming/src/series/candlestick.rs index 29420f0..500ef95 100644 --- a/charming/src/series/candlestick.rs +++ b/charming/src/series/candlestick.rs @@ -5,7 +5,7 @@ use crate::{ element::{ColorBy, CoordinateSystem}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Candlestick { #[serde(rename = "type")] diff --git a/charming/src/series/custom.rs b/charming/src/series/custom.rs index c5c1178..a82f17c 100644 --- a/charming/src/series/custom.rs +++ b/charming/src/series/custom.rs @@ -7,7 +7,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Custom { type_: String, diff --git a/charming/src/series/effect_scatter.rs b/charming/src/series/effect_scatter.rs index 64335d5..83e09fe 100644 --- a/charming/src/series/effect_scatter.rs +++ b/charming/src/series/effect_scatter.rs @@ -8,27 +8,27 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum EffectType { Ripple, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum ShowEffectOn { Render, Emphasis, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum RippleEffectBrushType { Fill, Stroke, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct RippleEffect { #[serde(skip_serializing_if = "Option::is_none")] @@ -90,7 +90,7 @@ impl RippleEffect { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct EffectScatter { #[serde(rename = "type")] diff --git a/charming/src/series/funnel.rs b/charming/src/series/funnel.rs index 9f46ffe..ded015c 100644 --- a/charming/src/series/funnel.rs +++ b/charming/src/series/funnel.rs @@ -5,7 +5,7 @@ use crate::{ element::{ColorBy, Emphasis, ItemStyle, Label, LabelLine, Orient, Sort}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum Align { Left, @@ -13,7 +13,7 @@ pub enum Align { Center, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Funnel { #[serde(rename = "type")] diff --git a/charming/src/series/gauge.rs b/charming/src/series/gauge.rs index 1c0454a..747c016 100644 --- a/charming/src/series/gauge.rs +++ b/charming/src/series/gauge.rs @@ -8,7 +8,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GaugeDetail { #[serde(skip_serializing_if = "Option::is_none")] @@ -106,7 +106,7 @@ impl GaugeDetail { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GaugeTitle { #[serde(skip_serializing_if = "Option::is_none")] @@ -141,7 +141,7 @@ impl GaugeTitle { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GaugeProgress { #[serde(skip_serializing_if = "Option::is_none")] @@ -212,7 +212,7 @@ impl GaugeProgress { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Gauge { #[serde(rename = "type")] diff --git a/charming/src/series/graph.rs b/charming/src/series/graph.rs index 3fd0bca..47b840a 100644 --- a/charming/src/series/graph.rs +++ b/charming/src/series/graph.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::element::{CoordinateSystem, Label, LabelLayout, LineStyle, ScaleLimit}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphLayoutCircular { #[serde(skip_serializing_if = "Option::is_none")] @@ -26,7 +26,7 @@ impl GraphLayoutCircular { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphLayoutForce { #[serde(skip_serializing_if = "Option::is_none")] @@ -88,7 +88,7 @@ impl GraphLayoutForce { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum GraphLayout { None, @@ -107,7 +107,7 @@ impl From<&str> for GraphLayout { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphNodeLabel { #[serde(skip_serializing_if = "Option::is_none")] @@ -169,7 +169,7 @@ impl GraphNodeLabel { } } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphNode { pub id: String, @@ -184,7 +184,7 @@ pub struct GraphNode { pub label: Option, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphLink { pub source: String, @@ -193,13 +193,13 @@ pub struct GraphLink { pub value: Option, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphCategory { pub name: String, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct GraphData { pub nodes: Vec, @@ -207,7 +207,7 @@ pub struct GraphData { pub categories: Vec, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Graph { #[serde(rename = "type")] diff --git a/charming/src/series/heatmap.rs b/charming/src/series/heatmap.rs index bae05c2..12d4a7d 100644 --- a/charming/src/series/heatmap.rs +++ b/charming/src/series/heatmap.rs @@ -5,7 +5,7 @@ use crate::{ element::{CoordinateSystem, Emphasis, ItemStyle, Label}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Heatmap { #[serde(rename = "type")] diff --git a/charming/src/series/line.rs b/charming/src/series/line.rs index 99f03e5..221fb70 100644 --- a/charming/src/series/line.rs +++ b/charming/src/series/line.rs @@ -8,7 +8,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Line { #[serde(rename = "type")] diff --git a/charming/src/series/map.rs b/charming/src/series/map.rs index a9035dd..4fbb58b 100644 --- a/charming/src/series/map.rs +++ b/charming/src/series/map.rs @@ -1,5 +1,5 @@ use serde::Serialize; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Map {} diff --git a/charming/src/series/mod.rs b/charming/src/series/mod.rs index c56981a..9522fa0 100644 --- a/charming/src/series/mod.rs +++ b/charming/src/series/mod.rs @@ -50,6 +50,7 @@ pub use theme_river::*; pub use tree::*; pub use treemap::*; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Series { Bar(bar::Bar), Bar3d(bar3d::Bar3d), diff --git a/charming/src/series/parallel.rs b/charming/src/series/parallel.rs index 0754b5d..8400e36 100644 --- a/charming/src/series/parallel.rs +++ b/charming/src/series/parallel.rs @@ -5,14 +5,14 @@ use crate::{ element::{ColorBy, CoordinateSystem, Emphasis, LineStyle}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum ProgressiveChunkMode { Sequential, Mod, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Parallel { #[serde(rename = "type")] diff --git a/charming/src/series/pictorial_bar.rs b/charming/src/series/pictorial_bar.rs index f613980..d857092 100644 --- a/charming/src/series/pictorial_bar.rs +++ b/charming/src/series/pictorial_bar.rs @@ -7,7 +7,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct PictorialBar { #[serde(rename = "type")] diff --git a/charming/src/series/pie.rs b/charming/src/series/pie.rs index f3bf450..607282c 100644 --- a/charming/src/series/pie.rs +++ b/charming/src/series/pie.rs @@ -5,14 +5,14 @@ use crate::{ element::{ColorBy, CoordinateSystem, Emphasis, ItemStyle, Label, LabelLine}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum PieRoseType { Radius, Area, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Pie { #[serde(rename = "type")] diff --git a/charming/src/series/radar.rs b/charming/src/series/radar.rs index 64e0883..d3981f0 100644 --- a/charming/src/series/radar.rs +++ b/charming/src/series/radar.rs @@ -5,7 +5,7 @@ use crate::{ element::{AreaStyle, ColorBy, Emphasis, LineStyle, Symbol, Tooltip}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Radar { #[serde(rename = "type")] diff --git a/charming/src/series/sankey.rs b/charming/src/series/sankey.rs index 7013cd3..69db444 100644 --- a/charming/src/series/sankey.rs +++ b/charming/src/series/sankey.rs @@ -5,7 +5,7 @@ use crate::{ element::{Emphasis, ItemStyle, Label, LineStyle, Orient}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum SankeyNodeAlign { Left, @@ -13,7 +13,7 @@ pub enum SankeyNodeAlign { Justify, } -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SankeyNode { pub name: String, @@ -70,7 +70,7 @@ where } } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SankeyLink { pub source: String, @@ -92,7 +92,7 @@ where } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Sankey { #[serde(rename = "type")] diff --git a/charming/src/series/scatter.rs b/charming/src/series/scatter.rs index 44d53c4..550f657 100644 --- a/charming/src/series/scatter.rs +++ b/charming/src/series/scatter.rs @@ -8,7 +8,7 @@ use crate::{ }, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Scatter { #[serde(rename = "type")] diff --git a/charming/src/series/sunburst.rs b/charming/src/series/sunburst.rs index 64855f5..2b8b53a 100644 --- a/charming/src/series/sunburst.rs +++ b/charming/src/series/sunburst.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::element::{Emphasis, ItemStyle, Label, Sort}; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SunburstLevel { #[serde(skip_serializing_if = "Option::is_none")] @@ -55,7 +55,7 @@ impl SunburstLevel { } } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct SunburstNode { name: String, @@ -117,7 +117,7 @@ impl From<(&str, f64, &str)> for SunburstNode { } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Sunburst { #[serde(rename = "type")] diff --git a/charming/src/series/theme_river.rs b/charming/src/series/theme_river.rs index 742453d..bf843e5 100644 --- a/charming/src/series/theme_river.rs +++ b/charming/src/series/theme_river.rs @@ -5,6 +5,7 @@ use crate::{ element::{BoundaryGap, ColorBy, CoordinateSystem, Label}, }; +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub struct ThemeRiverData { date: CompositeValue, value: CompositeValue, @@ -47,7 +48,7 @@ where } } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct ThemeRiver { #[serde(rename = "type")] diff --git a/charming/src/series/tree.rs b/charming/src/series/tree.rs index d92dbe7..e94ae57 100644 --- a/charming/src/series/tree.rs +++ b/charming/src/series/tree.rs @@ -5,14 +5,14 @@ use crate::{ element::{Blur, Emphasis, ItemStyle, Label, Select, Symbol}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum TreeLayout { Orthogonal, Radial, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] pub enum TreeOrient { #[serde(rename = "LR")] LeftRight, @@ -24,14 +24,14 @@ pub enum TreeOrient { BottomTop, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "snake_case")] pub enum TreeEdgeShape { Curve, Polyline, } -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct TreeLeaves { #[serde(skip_serializing_if = "Option::is_none")] @@ -55,7 +55,7 @@ impl TreeLeaves { } } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct TreeNode { pub name: String, @@ -71,7 +71,7 @@ pub struct TreeNode { } /// The tree diagram is mainly used to display the tree data structure. -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Tree { #[serde(rename = "type")] diff --git a/charming/src/series/treemap.rs b/charming/src/series/treemap.rs index 3a27b03..87e060e 100644 --- a/charming/src/series/treemap.rs +++ b/charming/src/series/treemap.rs @@ -5,7 +5,7 @@ use crate::{ element::{Emphasis, ItemStyle, Label}, }; -#[derive(Serialize)] +#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] #[serde(rename_all = "camelCase")] pub struct Treemap { #[serde(rename = "type")] From a7fa5b562b558c20168605ce9937581b2fa31e95 Mon Sep 17 00:00:00 2001 From: LukaOber Date: Fri, 4 Oct 2024 20:19:18 +0200 Subject: [PATCH 11/15] set progressive to 0 for ssr rendering --- charming/src/renderer/image_renderer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charming/src/renderer/image_renderer.rs b/charming/src/renderer/image_renderer.rs index b5175c4..1d718b5 100644 --- a/charming/src/renderer/image_renderer.rs +++ b/charming/src/renderer/image_renderer.rs @@ -19,7 +19,7 @@ var chart = echarts.init(null, {{#if theme}}'{{ theme }}'{{else}}null{{/if}}, { height: {{ height }} }); -chart.setOption({ animation: false }); +chart.setOption({ animation: false, progressive: 0 }); chart.setOption({{{ chart_option }}}); chart.renderToSVGString(); "#; From 5d2bef8293ba5e0ca228de798de1900875e74ff7 Mon Sep 17 00:00:00 2001 From: LukaOber Date: Mon, 7 Oct 2024 13:42:27 +0200 Subject: [PATCH 12/15] added type for custom smoothness --- charming/src/element/mod.rs | 1 + charming/src/element/smoothness.rs | 49 ++++++++++++++++++++++++++++++ charming/src/series/line.rs | 8 ++--- charming/src/series/parallel.rs | 6 ++-- 4 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 charming/src/element/smoothness.rs diff --git a/charming/src/element/mod.rs b/charming/src/element/mod.rs index 14ed0b6..69819ab 100644 --- a/charming/src/element/mod.rs +++ b/charming/src/element/mod.rs @@ -36,6 +36,7 @@ pub mod pointer; pub mod scale_limit; pub mod select; pub mod shape; +pub mod smoothness; pub mod sort; pub mod split_area; pub mod split_line; diff --git a/charming/src/element/smoothness.rs b/charming/src/element/smoothness.rs new file mode 100644 index 0000000..7a8aae5 --- /dev/null +++ b/charming/src/element/smoothness.rs @@ -0,0 +1,49 @@ +use serde::Serialize; + +#[derive(Debug, PartialEq, PartialOrd, Clone)] +pub enum Smoothness { + Single(f64), + Boolean(bool), +} + +impl Serialize for Smoothness { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + Smoothness::Single(smoothness) => serializer.serialize_f64(*smoothness), + Smoothness::Boolean(smoothness) => serializer.serialize_bool(*smoothness), + } + } +} + +impl From for Smoothness { + fn from(value: f64) -> Self { + Smoothness::Single(value) + } +} + +impl From for Smoothness { + fn from(value: f32) -> Self { + Smoothness::Single(value as f64) + } +} + +impl From for Smoothness { + fn from(value: i32) -> Self { + Smoothness::Single(value as f64) + } +} + +impl From for Smoothness { + fn from(value: u32) -> Self { + Smoothness::Single(value as f64) + } +} + +impl From for Smoothness { + fn from(value: bool) -> Self { + Smoothness::Boolean(value) + } +} diff --git a/charming/src/series/line.rs b/charming/src/series/line.rs index 221fb70..519a651 100644 --- a/charming/src/series/line.rs +++ b/charming/src/series/line.rs @@ -3,8 +3,8 @@ use serde::Serialize; use crate::{ datatype::{DataFrame, DataPoint}, element::{ - AreaStyle, CoordinateSystem, DimensionEncode, Emphasis, ItemStyle, Label, LineStyle, - MarkArea, MarkLine, MarkPoint, Symbol, + smoothness::Smoothness, AreaStyle, CoordinateSystem, DimensionEncode, Emphasis, ItemStyle, + Label, LineStyle, MarkArea, MarkLine, MarkPoint, Symbol, }, }; @@ -51,7 +51,7 @@ pub struct Line { emphasis: Option, #[serde(skip_serializing_if = "Option::is_none")] - smooth: Option, + smooth: Option, #[serde(skip_serializing_if = "Option::is_none")] connect_nulls: Option, @@ -178,7 +178,7 @@ impl Line { } /// Smoothness. - pub fn smooth>(mut self, smooth: F) -> Self { + pub fn smooth>(mut self, smooth: S) -> Self { self.smooth = Some(smooth.into()); self } diff --git a/charming/src/series/parallel.rs b/charming/src/series/parallel.rs index 8400e36..8dc9377 100644 --- a/charming/src/series/parallel.rs +++ b/charming/src/series/parallel.rs @@ -2,7 +2,7 @@ use serde::Serialize; use crate::{ datatype::{DataFrame, DataPoint}, - element::{ColorBy, CoordinateSystem, Emphasis, LineStyle}, + element::{smoothness::Smoothness, ColorBy, CoordinateSystem, Emphasis, LineStyle}, }; #[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] @@ -49,7 +49,7 @@ pub struct Parallel { realtime: Option, #[serde(skip_serializing_if = "Option::is_none")] - smooth: Option, + smooth: Option, #[serde(skip_serializing_if = "Option::is_none")] progressive: Option, @@ -142,7 +142,7 @@ impl Parallel { self } - pub fn smooth>(mut self, smooth: F) -> Self { + pub fn smooth>(mut self, smooth: S) -> Self { self.smooth = Some(smooth.into()); self } From 4997501a0f89593c1529e79fbfba9c93b3f8c2dc Mon Sep 17 00:00:00 2001 From: LukaOber Date: Mon, 7 Oct 2024 13:45:24 +0200 Subject: [PATCH 13/15] fixed gallery with wrong smoothness --- gallery/src/line/area_pieces.rs | 2 +- gallery/src/line/distribution_of_electricity.rs | 2 +- gallery/src/line/gradient_stacked_area.rs | 10 +++++----- gallery/src/line/smoothed_line.rs | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gallery/src/line/area_pieces.rs b/gallery/src/line/area_pieces.rs index 5b9f152..e563ffd 100644 --- a/gallery/src/line/area_pieces.rs +++ b/gallery/src/line/area_pieces.rs @@ -35,7 +35,7 @@ pub fn chart() -> Chart { ) .series( Line::new() - .smooth(0.6) + .smooth(true) .symbol(Symbol::None) .line_style(LineStyle::new().width(5).color("#5470C6")) .area_style(AreaStyle::new()) diff --git a/gallery/src/line/distribution_of_electricity.rs b/gallery/src/line/distribution_of_electricity.rs index 326a0a6..45ceae3 100644 --- a/gallery/src/line/distribution_of_electricity.rs +++ b/gallery/src/line/distribution_of_electricity.rs @@ -51,7 +51,7 @@ pub fn chart() -> Chart { .series( Line::new() .name("Electricity") - .smooth(0.5) + .smooth(true) .connect_nulls(true) .data(vec![ Some(300), diff --git a/gallery/src/line/gradient_stacked_area.rs b/gallery/src/line/gradient_stacked_area.rs index cbf15c3..ad90574 100644 --- a/gallery/src/line/gradient_stacked_area.rs +++ b/gallery/src/line/gradient_stacked_area.rs @@ -61,7 +61,7 @@ pub fn chart() -> Chart { }) .opacity(0.8), ) - .smooth(0.5) + .smooth(true) .data(vec![140, 232, 101, 264, 90, 340, 250]), ) .series( @@ -84,7 +84,7 @@ pub fn chart() -> Chart { }) .opacity(0.8), ) - .smooth(0.5) + .smooth(true) .data(vec![120, 282, 111, 234, 220, 340, 310]), ) .series( @@ -107,7 +107,7 @@ pub fn chart() -> Chart { }) .opacity(0.8), ) - .smooth(0.5) + .smooth(true) .data(vec![320, 132, 201, 334, 190, 130, 220]), ) .series( @@ -130,7 +130,7 @@ pub fn chart() -> Chart { }) .opacity(0.8), ) - .smooth(0.5) + .smooth(true) .data(vec![220, 402, 231, 134, 190, 230, 120]), ) .series( @@ -153,7 +153,7 @@ pub fn chart() -> Chart { }) .opacity(0.8), ) - .smooth(0.5) + .smooth(true) .data(vec![220, 302, 181, 234, 210, 290, 150]), ) } diff --git a/gallery/src/line/smoothed_line.rs b/gallery/src/line/smoothed_line.rs index e23cf8e..e173d7b 100644 --- a/gallery/src/line/smoothed_line.rs +++ b/gallery/src/line/smoothed_line.rs @@ -10,7 +10,7 @@ pub fn chart() -> Chart { .y_axis(Axis::new().type_(AxisType::Value)) .series( Line::new() - .smooth(0.5) + .smooth(true) .data(vec![820, 932, 901, 934, 1290, 1330, 1320]), ) } From 9fca003ccd3828e16002864b3a51f615e12ae8ec Mon Sep 17 00:00:00 2001 From: LukaOber Date: Mon, 7 Oct 2024 14:45:02 +0200 Subject: [PATCH 14/15] removed non working partialord on legend --- charming/src/component/legend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charming/src/component/legend.rs b/charming/src/component/legend.rs index 26bb2b3..29fea58 100644 --- a/charming/src/component/legend.rs +++ b/charming/src/component/legend.rs @@ -69,7 +69,7 @@ impl From<(String, String)> for LegendItem { } } -#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] +#[derive(Serialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct Legend { /// Type of legend. From 55704aff5c8812b8feed36a45351fe668bcfb57f Mon Sep 17 00:00:00 2001 From: Grey Date: Mon, 7 Oct 2024 21:11:07 +0800 Subject: [PATCH 15/15] fix lint --- charming/src/component/legend.rs | 2 +- charming/src/element/symbol.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charming/src/component/legend.rs b/charming/src/component/legend.rs index 26bb2b3..29fea58 100644 --- a/charming/src/component/legend.rs +++ b/charming/src/component/legend.rs @@ -69,7 +69,7 @@ impl From<(String, String)> for LegendItem { } } -#[derive(Serialize, Debug, PartialEq, PartialOrd, Clone)] +#[derive(Serialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct Legend { /// Type of legend. diff --git a/charming/src/element/symbol.rs b/charming/src/element/symbol.rs index 4738e0d..3aa219f 100644 --- a/charming/src/element/symbol.rs +++ b/charming/src/element/symbol.rs @@ -1,5 +1,5 @@ -use serde::Serialize; use super::RawString; +use serde::Serialize; #[derive(Debug, PartialEq, PartialOrd, Clone)] pub enum Symbol {