use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiMessage {
#[serde(
rename = "surfaceUpdate",
default,
skip_serializing_if = "Option::is_none"
)]
pub surface_update: Option<A2uiSurfaceUpdate>,
#[serde(
rename = "dataModelUpdate",
default,
skip_serializing_if = "Option::is_none"
)]
pub data_model_update: Option<A2uiDataModelUpdate>,
#[serde(
rename = "beginRendering",
default,
skip_serializing_if = "Option::is_none"
)]
pub begin_rendering: Option<A2uiBeginRendering>,
#[serde(
rename = "deleteSurface",
default,
skip_serializing_if = "Option::is_none"
)]
pub delete_surface: Option<A2uiDeleteSurface>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiBeginRendering {
#[serde(rename = "surfaceId")]
pub surface_id: String,
pub root: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub styles: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiSurfaceUpdate {
#[serde(rename = "surfaceId")]
pub surface_id: String,
pub components: Vec<A2uiComponent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiComponent {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight: Option<f64>,
pub component: Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiDataModelUpdate {
#[serde(rename = "surfaceId")]
pub surface_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
pub contents: Vec<A2uiDataModelEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiDataModelEntry {
pub key: String,
#[serde(
rename = "valueString",
default,
skip_serializing_if = "Option::is_none"
)]
pub value_string: Option<String>,
#[serde(
rename = "valueNumber",
default,
skip_serializing_if = "Option::is_none"
)]
pub value_number: Option<f64>,
#[serde(
rename = "valueBoolean",
default,
skip_serializing_if = "Option::is_none"
)]
pub value_boolean: Option<bool>,
#[serde(rename = "valueMap", default, skip_serializing_if = "Option::is_none")]
pub value_map: Option<Vec<A2uiDataModelEntry>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct A2uiDeleteSurface {
#[serde(rename = "surfaceId")]
pub surface_id: String,
}