1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct DataReference {
10 pub source: String,
11 pub format: DataFormat,
12 pub schema: Option<DataSchema>,
13}
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
17pub enum DataFormat {
18 JSON,
19 CSV,
20 Parquet,
21 Arrow,
22 Inline,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27pub struct DataSchema {
28 pub fields: Vec<FieldDef>,
29 pub primary_key: Option<String>,
30}
31
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
34pub struct FieldDef {
35 pub name: String,
36 pub data_type: DataType,
37 pub nullable: bool,
38 pub description: Option<String>,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
43pub enum DataType {
44 String,
45 Number,
46 Integer,
47 Boolean,
48 Date,
49 DateTime,
50 Time,
51 Quantitative,
53 Nominal,
54 Ordinal,
55 Temporal,
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
60pub struct Encoding {
61 pub x: Option<EncodingDef>,
62 pub y: Option<EncodingDef>,
63 pub color: Option<EncodingDef>,
64 pub size: Option<EncodingDef>,
65 pub shape: Option<EncodingDef>,
66 pub opacity: Option<EncodingDef>,
67 pub text: Option<EncodingDef>,
68 pub tooltip: Option<EncodingDef>,
69 pub detail: Option<EncodingDef>,
70 pub order: Option<EncodingDef>,
71 pub row: Option<EncodingDef>,
72 pub column: Option<EncodingDef>,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77pub struct EncodingDef {
78 pub field: String,
79 pub data_type: DataType,
80 pub scale: Option<Scale>,
81 pub axis: Option<Axis>,
82 pub legend: Option<Legend>,
83 pub bin: Option<Bin>,
84 pub aggregate: Option<Aggregate>,
85 pub sort: Option<Sort>,
86}
87
88pub type PositionEncoding = EncodingDef;
90
91pub type ColorEncoding = EncodingDef;
93
94pub type SizeEncoding = EncodingDef;
96
97#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
99pub struct Scale {
100 pub domain: Option<ScaleDomain>,
101 pub range: Option<ScaleRange>,
102 pub type_: Option<ScaleType>,
103 pub zero: Option<bool>,
104 pub nice: Option<bool>,
105 pub padding: Option<f32>,
106}
107
108#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
110pub enum ScaleDomain {
111 Data,
112 Independent,
113 Values(Vec<serde_json::Value>),
114}
115
116#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
118pub enum ScaleRange {
119 Values(Vec<serde_json::Value>),
120 Scheme(String),
121}
122
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
125pub enum ScaleType {
126 Linear,
127 Log,
128 Pow,
129 Sqrt,
130 Symlog,
131 Time,
132 Utc,
133 Ordinal,
134 Band,
135 Point,
136}
137
138#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
140pub struct Axis {
141 pub title: Option<String>,
142 pub labels: Option<bool>,
143 pub grid: Option<bool>,
144 pub ticks: Option<bool>,
145 pub domain: Option<bool>,
146 pub orient: Option<AxisOrient>,
147 pub format: Option<String>,
148 pub angle: Option<f32>,
149}
150
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
153pub enum AxisOrient {
154 Top,
155 Bottom,
156 Left,
157 Right,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
162pub struct Legend {
163 pub title: Option<String>,
164 pub orient: Option<LegendOrient>,
165 pub offset: Option<f32>,
166 pub padding: Option<f32>,
167 pub margin: Option<f32>,
168 pub gradient_length: Option<f32>,
169 pub gradient_thickness: Option<f32>,
170 pub gradient_stroke_color: Option<String>,
171 pub gradient_stroke_width: Option<f32>,
172 pub label_color: Option<String>,
173 pub label_font: Option<String>,
174 pub label_font_size: Option<f32>,
175 pub label_limit: Option<f32>,
176 pub symbol_color: Option<String>,
177 pub symbol_size: Option<f32>,
178 pub symbol_stroke_width: Option<f32>,
179 pub symbol_type: Option<String>,
180 pub title_color: Option<String>,
181 pub title_font: Option<String>,
182 pub title_font_size: Option<f32>,
183 pub title_font_weight: Option<String>,
184 pub title_limit: Option<f32>,
185 pub title_padding: Option<f32>,
186}
187
188#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
190pub enum LegendOrient {
191 Left,
192 Right,
193 Top,
194 Bottom,
195 None,
196}
197
198#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
200pub struct Bin {
201 pub maxbins: Option<u32>,
202 pub step: Option<f32>,
203 pub steps: Option<Vec<f32>>,
204 pub minstep: Option<f32>,
205 pub divide: Option<Vec<f32>>,
206 pub extent: Option<Vec<f32>>,
207 pub nice: Option<bool>,
208}
209
210#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
212pub enum Aggregate {
213 Count,
214 Valid,
215 Missing,
216 Distinct,
217 Sum,
218 Mean,
219 Average,
220 Variance,
221 Variancep,
222 Stdev,
223 Stdevp,
224 Median,
225 Q1,
226 Q3,
227 Modeskew,
228 Min,
229 Max,
230 Argmin,
231 Argmax,
232 Values,
233 Uniq,
234 UniqBy,
235}
236
237#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
239pub struct Sort {
240 pub field: Option<String>,
241 pub order: Option<SortOrder>,
242}
243
244#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
246pub enum SortOrder {
247 Ascending,
248 Descending,
249}
250
251#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
253pub struct ChartConfig {
254 pub title: String,
255 pub description: String,
256 pub width: Option<f32>,
257 pub height: Option<f32>,
258 pub padding: Option<Padding>,
259 pub background: Option<String>,
260 pub viewport: Option<Viewport>,
261 pub legend: Option<Legend>,
262 pub axis: Option<AxisConfig>,
263 pub mark: Option<MarkConfig>,
264 pub selection: Option<SelectionConfig>,
265 pub scale: Option<ScaleConfig>,
266 pub range: Option<RangeConfig>,
267 pub facet: Option<FacetConfig>,
268 pub header: Option<HeaderConfig>,
269 pub overlay: Option<OverlayConfig>,
270 pub style: Option<StyleConfig>,
271 pub signals: Option<Vec<SignalConfig>>,
272 pub data: Option<Vec<DataConfig>>,
273 pub layout: Option<LayoutConfig>,
274 pub projection: Option<ProjectionConfig>,
275 pub encoding: Option<EncodingConfig>,
276 pub resolve: Option<ResolveConfig>,
277 pub autosize: Option<AutosizeConfig>,
278 pub usermeta: Option<serde_json::Value>,
279}
280
281#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
283pub struct Padding {
284 pub top: Option<f32>,
285 pub bottom: Option<f32>,
286 pub left: Option<f32>,
287 pub right: Option<f32>,
288}
289
290#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
292pub struct Viewport {
293 pub stroke: Option<String>,
294 pub stroke_width: Option<f32>,
295 pub fill: Option<String>,
296 pub fill_opacity: Option<f32>,
297}
298
299#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
301pub struct AxisConfig {
302 pub band_position: Option<f32>,
303 pub domain: Option<bool>,
304 pub domain_color: Option<String>,
305 pub domain_opacity: Option<f32>,
306 pub domain_width: Option<f32>,
307 pub grid: Option<bool>,
308 pub grid_color: Option<String>,
309 pub grid_dash: Option<Vec<f32>>,
310 pub grid_opacity: Option<f32>,
311 pub grid_width: Option<f32>,
312 pub label_angle: Option<f32>,
313 pub label_color: Option<String>,
314 pub label_flush: Option<bool>,
315 pub label_flush_offset: Option<f32>,
316 pub label_font: Option<String>,
317 pub label_font_size: Option<f32>,
318 pub label_font_style: Option<String>,
319 pub label_font_weight: Option<String>,
320 pub label_limit: Option<f32>,
321 pub label_padding: Option<f32>,
322 pub label_separation: Option<f32>,
323 pub max_extent: Option<f32>,
324 pub min_extent: Option<f32>,
325 pub short_time_labels: Option<bool>,
326 pub tick_color: Option<String>,
327 pub tick_dash: Option<Vec<f32>>,
328 pub tick_opacity: Option<f32>,
329 pub tick_size: Option<f32>,
330 pub tick_width: Option<f32>,
331 pub ticks: Option<bool>,
332 pub title_align: Option<String>,
333 pub title_anchor: Option<String>,
334 pub title_angle: Option<f32>,
335 pub title_baseline: Option<String>,
336 pub title_color: Option<String>,
337 pub title_font: Option<String>,
338 pub title_font_size: Option<f32>,
339 pub title_font_style: Option<String>,
340 pub title_font_weight: Option<String>,
341 pub title_limit: Option<f32>,
342 pub title_padding: Option<f32>,
343 pub title_x: Option<f32>,
344 pub title_y: Option<f32>,
345}
346
347#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
349pub struct MarkConfig {
350 pub color: Option<String>,
351 pub fill: Option<String>,
352 pub fill_opacity: Option<f32>,
353 pub stroke: Option<String>,
354 pub stroke_cap: Option<String>,
355 pub stroke_dash: Option<Vec<f32>>,
356 pub stroke_dash_offset: Option<f32>,
357 pub stroke_join: Option<String>,
358 pub stroke_miter_limit: Option<f32>,
359 pub stroke_opacity: Option<f32>,
360 pub stroke_width: Option<f32>,
361 pub opacity: Option<f32>,
362 pub blend: Option<String>,
363 pub fill_rule: Option<String>,
364 pub stroke_foreground: Option<bool>,
365 pub stroke_offset: Option<f32>,
366 pub aria: Option<bool>,
367 pub description: Option<String>,
368 pub cursor: Option<String>,
369 pub href: Option<String>,
370 pub tooltip: Option<serde_json::Value>,
371 pub zindex: Option<f32>,
372}
373
374#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
376pub struct SelectionConfig {
377 pub interval: Option<IntervalConfig>,
378 pub single: Option<SingleConfig>,
379 pub multi: Option<MultiConfig>,
380}
381
382#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
384pub struct IntervalConfig {
385 pub bind: Option<String>,
386 pub clear: Option<String>,
387 pub empty: Option<String>,
388 pub encodings: Option<Vec<String>>,
389 pub fields: Option<Vec<String>>,
390 pub init: Option<serde_json::Value>,
391 pub mark: Option<MarkConfig>,
392 pub on: Option<String>,
393 pub resolve: Option<String>,
394 pub translate: Option<String>,
395 pub zoom: Option<String>,
396}
397
398#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
400pub struct SingleConfig {
401 pub bind: Option<String>,
402 pub clear: Option<String>,
403 pub empty: Option<String>,
404 pub encodings: Option<Vec<String>>,
405 pub fields: Option<Vec<String>>,
406 pub init: Option<serde_json::Value>,
407 pub on: Option<String>,
408 pub resolve: Option<String>,
409 pub toggle: Option<String>,
410 pub nearest: Option<bool>,
411}
412
413#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
415pub struct MultiConfig {
416 pub bind: Option<String>,
417 pub clear: Option<String>,
418 pub empty: Option<String>,
419 pub encodings: Option<Vec<String>>,
420 pub fields: Option<Vec<String>>,
421 pub init: Option<serde_json::Value>,
422 pub on: Option<String>,
423 pub resolve: Option<String>,
424 pub toggle: Option<String>,
425 pub nearest: Option<bool>,
426}
427
428#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
430pub struct ScaleConfig {
431 pub band_padding_inner: Option<f32>,
432 pub band_padding_outer: Option<f32>,
433 pub bar_size: Option<f32>,
434 pub continuous_padding: Option<f32>,
435 pub max_font_size: Option<f32>,
436 pub max_opacity: Option<f32>,
437 pub max_size: Option<f32>,
438 pub max_stroke_width: Option<f32>,
439 pub min_font_size: Option<f32>,
440 pub min_opacity: Option<f32>,
441 pub min_size: Option<f32>,
442 pub min_stroke_width: Option<f32>,
443 pub point_padding: Option<f32>,
444 pub range_step: Option<f32>,
445 pub round: Option<bool>,
446 pub text_x_range_step: Option<f32>,
447 pub use_unaggregated_domain: Option<bool>,
448}
449
450#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
452pub struct RangeConfig {
453 pub category: Option<Vec<String>>,
454 pub diverging: Option<Vec<String>>,
455 pub heatmap: Option<Vec<String>>,
456 pub ordinal: Option<Vec<String>>,
457 pub ramp: Option<Vec<String>>,
458 pub symbol: Option<Vec<String>>,
459}
460
461#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
463pub struct FacetConfig {
464 pub spacing: Option<f32>,
465}
466
467#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
469pub struct HeaderConfig {
470 pub label_angle: Option<f32>,
471 pub label_color: Option<String>,
472 pub label_font: Option<String>,
473 pub label_font_size: Option<f32>,
474 pub label_font_style: Option<String>,
475 pub label_font_weight: Option<String>,
476 pub label_limit: Option<f32>,
477 pub label_padding: Option<f32>,
478 pub title_align: Option<String>,
479 pub title_anchor: Option<String>,
480 pub title_angle: Option<f32>,
481 pub title_baseline: Option<String>,
482 pub title_color: Option<String>,
483 pub title_font: Option<String>,
484 pub title_font_size: Option<f32>,
485 pub title_font_style: Option<String>,
486 pub title_font_weight: Option<String>,
487 pub title_limit: Option<f32>,
488 pub title_padding: Option<f32>,
489}
490
491#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
493pub struct OverlayConfig {
494 pub line: Option<bool>,
495 pub point_style_fill_opacity: Option<f32>,
496 pub point_style_stroke: Option<String>,
497 pub point_style_stroke_width: Option<f32>,
498 pub point_style_fill: Option<String>,
499 pub point_style_stroke_opacity: Option<f32>,
500 pub point_style_stroke_dash: Option<Vec<f32>>,
501 pub point_style_stroke_dash_offset: Option<f32>,
502 pub point_style_stroke_cap: Option<String>,
503 pub point_style_stroke_join: Option<String>,
504 pub point_style_stroke_miter_limit: Option<f32>,
505 pub point_style_stroke_foreground: Option<bool>,
506 pub point_style_stroke_offset: Option<f32>,
507 pub point_style_opacity: Option<f32>,
508 pub point_style_blend: Option<String>,
509 pub point_style_fill_rule: Option<String>,
510 pub point_style_aria: Option<bool>,
511 pub point_style_description: Option<String>,
512 pub point_style_cursor: Option<String>,
513 pub point_style_href: Option<String>,
514 pub point_style_tooltip: Option<serde_json::Value>,
515 pub point_style_zindex: Option<f32>,
516}
517
518#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
520pub struct StyleConfig {
521 pub group: Option<serde_json::Value>,
522 pub cell: Option<serde_json::Value>,
523 pub facet: Option<serde_json::Value>,
524}
525
526#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
528pub struct SignalConfig {
529 pub name: String,
530 pub value: Option<serde_json::Value>,
531 pub bind: Option<serde_json::Value>,
532 pub on: Option<Vec<serde_json::Value>>,
533 pub update: Option<String>,
534 pub init: Option<String>,
535 pub react: Option<bool>,
536 pub force: Option<bool>,
537}
538
539#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
541pub struct DataConfig {
542 pub name: String,
543 pub source: Option<String>,
544 pub url: Option<String>,
545 pub format: Option<serde_json::Value>,
546 pub values: Option<serde_json::Value>,
547 pub transform: Option<Vec<serde_json::Value>>,
548}
549
550#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
552pub struct LayoutConfig {
553 pub padding: Option<f32>,
554 pub columns: Option<u32>,
555 pub bounds: Option<String>,
556 pub spacing: Option<f32>,
557 pub header_row: Option<f32>,
558 pub header_column: Option<f32>,
559 pub header_facet: Option<f32>,
560 pub footer_row: Option<f32>,
561 pub footer_column: Option<f32>,
562 pub footer_facet: Option<f32>,
563 pub title_row: Option<f32>,
564 pub title_column: Option<f32>,
565 pub title_facet: Option<f32>,
566 pub label_row: Option<f32>,
567 pub label_column: Option<f32>,
568 pub label_facet: Option<f32>,
569 pub center_row: Option<bool>,
570 pub center_column: Option<bool>,
571 pub center_facet: Option<bool>,
572 pub align: Option<String>,
573 pub columns_align: Option<String>,
574 pub rows_align: Option<String>,
575 pub facet_align: Option<String>,
576 pub columns_columns: Option<u32>,
577 pub rows_columns: Option<u32>,
578 pub facet_columns: Option<u32>,
579 pub columns_rows: Option<u32>,
580 pub rows_rows: Option<u32>,
581 pub facet_rows: Option<u32>,
582 pub columns_spacing: Option<f32>,
583 pub rows_spacing: Option<f32>,
584 pub facet_spacing: Option<f32>,
585 pub columns_padding: Option<f32>,
586 pub rows_padding: Option<f32>,
587 pub facet_padding: Option<f32>,
588 pub columns_bounds: Option<String>,
589 pub rows_bounds: Option<String>,
590 pub facet_bounds: Option<String>,
591 pub columns_center: Option<bool>,
592 pub rows_center: Option<bool>,
593 pub facet_center: Option<bool>,
594 pub columns_align_all: Option<String>,
595 pub rows_align_all: Option<String>,
596 pub facet_align_all: Option<String>,
597 pub columns_columns_all: Option<u32>,
598 pub rows_columns_all: Option<u32>,
599 pub facet_columns_all: Option<u32>,
600 pub columns_rows_all: Option<u32>,
601 pub rows_rows_all: Option<u32>,
602 pub facet_rows_all: Option<u32>,
603 pub columns_spacing_all: Option<f32>,
604 pub rows_spacing_all: Option<f32>,
605 pub facet_spacing_all: Option<f32>,
606 pub columns_padding_all: Option<f32>,
607 pub rows_padding_all: Option<f32>,
608 pub facet_padding_all: Option<f32>,
609 pub columns_bounds_all: Option<String>,
610 pub rows_bounds_all: Option<String>,
611 pub facet_bounds_all: Option<String>,
612 pub columns_center_all: Option<bool>,
613 pub rows_center_all: Option<bool>,
614 pub facet_center_all: Option<bool>,
615}
616
617#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
619pub struct ProjectionConfig {
620 pub type_: Option<String>,
621 pub clip_angle: Option<f32>,
622 pub clip_extent: Option<Vec<Vec<f32>>>,
623 pub center: Option<Vec<f32>>,
624 pub rotate: Option<Vec<f32>>,
625 pub precision: Option<f32>,
626 pub scale: Option<f32>,
627 pub translate: Option<Vec<f32>>,
628 pub coefficient: Option<f32>,
629 pub distance: Option<f32>,
630 pub fraction: Option<f32>,
631 pub lobes: Option<f32>,
632 pub parallel: Option<f32>,
633 pub radius: Option<f32>,
634 pub ratio: Option<f32>,
635 pub spacing: Option<f32>,
636 pub tilt: Option<f32>,
637}
638
639#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
641pub struct EncodingConfig {
642 pub x: Option<EncodingDef>,
643 pub y: Option<EncodingDef>,
644 pub color: Option<EncodingDef>,
645 pub size: Option<EncodingDef>,
646 pub shape: Option<EncodingDef>,
647 pub opacity: Option<EncodingDef>,
648 pub text: Option<EncodingDef>,
649 pub tooltip: Option<EncodingDef>,
650 pub detail: Option<EncodingDef>,
651 pub order: Option<EncodingDef>,
652 pub row: Option<EncodingDef>,
653 pub column: Option<EncodingDef>,
654}
655
656#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
658pub struct ResolveConfig {
659 pub axis: Option<serde_json::Value>,
660 pub legend: Option<serde_json::Value>,
661 pub scale: Option<serde_json::Value>,
662}
663
664#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
666pub struct AutosizeConfig {
667 pub type_: Option<String>,
668 pub contains: Option<String>,
669 pub resize: Option<bool>,
670}
671
672impl Default for ChartConfig {
673 fn default() -> Self {
674 Self {
675 title: String::new(),
676 description: String::new(),
677 width: None,
678 height: None,
679 padding: None,
680 background: None,
681 viewport: None,
682 legend: None,
683 axis: None,
684 mark: None,
685 selection: None,
686 scale: None,
687 range: None,
688 facet: None,
689 header: None,
690 overlay: None,
691 style: None,
692 signals: None,
693 data: None,
694 layout: None,
695 projection: None,
696 encoding: None,
697 resolve: None,
698 autosize: None,
699 usermeta: None,
700 }
701 }
702}
703
704#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
706pub enum MarkType {
707 Point {
709 size: Option<f32>,
710 shape: Option<PointShape>,
711 opacity: Option<f32>,
712 },
713 Line {
715 interpolate: Option<Interpolation>,
716 stroke_width: Option<f32>,
717 stroke_dash: Option<Vec<f32>>,
718 },
719 Bar {
721 width: Option<BarWidth>,
722 corner_radius: Option<f32>,
723 },
724 Area {
726 interpolate: Option<Interpolation>,
727 opacity: Option<f32>,
728 },
729 Text {
731 font_size: Option<f32>,
732 font_family: Option<String>,
733 align: Option<TextAlign>,
734 },
735 Rect {
737 stroke: Option<crate::Color>,
738 stroke_width: Option<f32>,
739 },
740 Scatter {
742 size: Option<f32>,
743 shape: Option<PointShape>,
744 opacity: Option<f32>,
745 jitter: Option<f32>,
746 trend_line: Option<bool>,
747 },
748 BoxPlot {
750 width: Option<f32>,
751 outlier_detection: Option<bool>,
752 whisker_type: Option<WhiskerType>,
753 },
754 Violin {
756 width: Option<f32>,
757 bandwidth: Option<f32>,
758 kernel: Option<KernelType>,
759 },
760 Heatmap {
762 color_scheme: Option<String>,
763 interpolation: Option<Interpolation>,
764 stroke: Option<crate::Color>,
765 },
766 Histogram {
768 bin_width: Option<f32>,
769 bin_count: Option<u32>,
770 density: Option<bool>,
771 },
772 Density {
774 bandwidth: Option<f32>,
775 kernel: Option<KernelType>,
776 fill: Option<bool>,
777 },
778 Contour {
780 levels: Option<u32>,
781 color_scheme: Option<String>,
782 stroke_width: Option<f32>,
783 },
784 Radar {
786 radius: Option<f32>,
787 stroke_width: Option<f32>,
788 fill_opacity: Option<f32>,
789 },
790 Sankey {
792 node_width: Option<f32>,
793 node_padding: Option<f32>,
794 link_opacity: Option<f32>,
795 },
796 Treemap {
798 padding: Option<f32>,
799 round: Option<bool>,
800 method: Option<TreemapMethod>,
801 },
802 Composite(Vec<MarkType>),
804 Point3D {
806 size: Option<f32>,
807 shape: Option<PointShape>,
808 opacity: Option<f32>,
809 },
810 Surface3D {
812 wireframe: Option<bool>,
813 opacity: Option<f32>,
814 },
815 Choropleth {
817 projection: Option<String>,
818 stroke: Option<crate::Color>,
819 stroke_width: Option<f32>,
820 },
821 NetworkGraph {
823 layout: Option<String>,
824 node_size: Option<f32>,
825 edge_width: Option<f32>,
826 },
827 DotMap {
829 projection: Option<String>,
830 dot_size: Option<f32>,
831 dot_opacity: Option<f32>,
832 },
833 FlowMap {
835 projection: Option<String>,
836 flow_width: Option<f32>,
837 flow_opacity: Option<f32>,
838 },
839}
840
841#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
843pub enum PointShape {
844 Circle,
845 Square,
846 Diamond,
847 Triangle,
848 Cross,
849 Plus,
850 Star,
851}
852
853#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
855pub enum Interpolation {
856 Linear,
857 Step,
858 StepBefore,
859 StepAfter,
860 Basis,
861 BasisOpen,
862 BasisClosed,
863 Bundle,
864 Cardinal,
865 CardinalOpen,
866 CardinalClosed,
867 Monotone,
868 CatmullRom,
869 CatmullRomOpen,
870 CatmullRomClosed,
871}
872
873#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
875pub enum BarWidth {
876 Band,
877 Point,
878 Value(f32),
879}
880
881#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
883pub enum TextAlign {
884 Left,
885 Center,
886 Right,
887}
888
889#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
891pub enum WhiskerType {
892 IQR,
893 MinMax,
894 StdDev,
895}
896
897#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
899pub enum KernelType {
900 Gaussian,
901 Epanechnikov,
902 Uniform,
903 Triangular,
904 Biweight,
905 Triweight,
906 Cosine,
907}
908
909#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
911pub enum TreemapMethod {
912 Squarify,
913 Resquarify,
914 Binary,
915 Dice,
916 Slice,
917 SliceDice,
918}
919
920#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
922pub struct Transform {
923 pub operation: TransformOperation,
924 pub parameters: std::collections::HashMap<String, serde_json::Value>,
925}
926
927#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
929pub enum TransformOperation {
930 Filter,
931 Aggregate,
932 Bin,
933 Calculate,
934 Density,
935 Extent,
936 Flatten,
937 Fold,
938 Impute,
939 JoinAggregate,
940 Loess,
941 Lookup,
942 Pivot,
943 Quantile,
944 Regression,
945 Sample,
946 Sequence,
947 Stack,
948 TimeUnit,
949 Window,
950}
951
952#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
954pub struct Selection {
955 pub name: String,
956 pub selection_type: SelectionType,
957 pub parameters: std::collections::HashMap<String, serde_json::Value>,
958}
959
960#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
962pub enum SelectionType {
963 Single,
964 Multi,
965 Interval,
966}
967
968#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
970pub struct Intelligence {
971 pub features: Vec<IntelligenceFeature>,
972 pub parameters: std::collections::HashMap<String, serde_json::Value>,
973 pub forecast: Option<ForecastConfig>,
974 pub anomaly_detection: Option<AnomalyConfig>,
975 pub trend_analysis: Option<bool>,
976 pub clustering: Option<ClusterConfig>,
977}
978
979#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
981pub struct ForecastConfig {
982 pub enabled: bool,
983 pub horizon: Option<u32>,
984 pub confidence_interval: Option<f64>,
985}
986
987#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
989pub struct AnomalyConfig {
990 pub enabled: bool,
991 pub threshold: Option<f64>,
992 pub method: Option<String>,
993}
994
995#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
997pub struct ClusterConfig {
998 pub enabled: bool,
999 pub algorithm: Option<String>,
1000 pub num_clusters: Option<u32>,
1001}
1002
1003#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1005pub enum IntelligenceFeature {
1006 AnomalyDetection,
1007 TrendAnalysis,
1008 Clustering,
1009 Classification,
1010 Regression,
1011 Forecasting,
1012 OutlierDetection,
1013 PatternRecognition,
1014}