use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum VegaLiteSpec {
Bar(VlBarSpec),
Line(VlLineSpec),
Point(VlPointSpec),
Circle(VlCircleSpec),
Arc(VlArcSpec),
Rect(VlRectSpec),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlData {
pub values: Vec<serde_json::Value>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlChannel {
pub field: String,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub field_type: Option<String>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum VlTitle {
Text(String),
Obj { text: String },
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkBarName {
Bar,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkBarObject {
#[serde(rename = "type")]
pub mark_type: MarkBarName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkBar {
String(MarkBarName),
Object(MarkBarObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkLineName {
Line,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkLineObject {
#[serde(rename = "type")]
pub mark_type: MarkLineName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkLine {
String(MarkLineName),
Object(MarkLineObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkPointName {
Point,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkPointObject {
#[serde(rename = "type")]
pub mark_type: MarkPointName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkPoint {
String(MarkPointName),
Object(MarkPointObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkCircleName {
Circle,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkCircleObject {
#[serde(rename = "type")]
pub mark_type: MarkCircleName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkCircle {
String(MarkCircleName),
Object(MarkCircleObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkArcName {
Arc,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkArcObject {
#[serde(rename = "type")]
pub mark_type: MarkArcName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkArc {
String(MarkArcName),
Object(MarkArcObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MarkRectName {
Rect,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct MarkRectObject {
#[serde(rename = "type")]
pub mark_type: MarkRectName,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum MarkRect {
String(MarkRectName),
Object(MarkRectObject),
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlBarSpec {
pub mark: MarkBar,
pub data: VlData,
pub encoding: VlBarEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlBarEncoding {
pub x: VlChannel,
pub y: VlChannel,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<VlChannel>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlLineSpec {
pub mark: MarkLine,
pub data: VlData,
pub encoding: VlBarEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlPointSpec {
pub mark: MarkPoint,
pub data: VlData,
pub encoding: VlPointEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlPointEncoding {
pub x: VlChannel,
pub y: VlChannel,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<VlChannel>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlCircleSpec {
pub mark: MarkCircle,
pub data: VlData,
pub encoding: VlCircleEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlCircleEncoding {
pub x: VlChannel,
pub y: VlChannel,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<VlChannel>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlArcSpec {
pub mark: MarkArc,
pub data: VlData,
pub encoding: VlArcEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlArcEncoding {
#[serde(skip_serializing_if = "Option::is_none")]
pub theta: Option<VlChannel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<VlChannel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub x: Option<VlChannel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub y: Option<VlChannel>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlRectSpec {
pub mark: MarkRect,
pub data: VlData,
pub encoding: VlRectEncoding,
#[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<VlTitle>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlRectEncoding {
pub x: VlRectAxisChannel,
pub y: VlRectAxisChannel,
pub color: VlRectColorChannel,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum VlRectAxisType {
Nominal,
Ordinal,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlRectAxisChannel {
pub field: String,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub field_type: Option<VlRectAxisType>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum VlRectAggregate {
Mean,
Sum,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum VlRectColorQuantitativeType {
Quantitative,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum VlRectColorCategoricalType {
Nominal,
Ordinal,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlRectColorQuantitativeChannel {
pub field: String,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub field_type: Option<VlRectColorQuantitativeType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aggregate: Option<VlRectAggregate>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct VlRectColorCategoricalChannel {
pub field: String,
#[serde(rename = "type")]
pub field_type: VlRectColorCategoricalType,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum VlRectColorChannel {
Quantitative(VlRectColorQuantitativeChannel),
Categorical(VlRectColorCategoricalChannel),
}