Skip to main content

adk_ui/a2ui/
messages.rs

1use serde::{Deserialize, Serialize};
2
3/// A2UI v0.9 createSurface payload.
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct CreateSurface {
7    pub surface_id: String,
8    pub catalog_id: String,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub theme: Option<serde_json::Value>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub send_data_model: Option<bool>,
13}
14
15/// A2UI v0.9 updateComponents payload.
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct UpdateComponents {
19    pub surface_id: String,
20    pub components: Vec<serde_json::Value>,
21}
22
23/// A2UI v0.9 updateDataModel payload.
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct UpdateDataModel {
27    pub surface_id: String,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub path: Option<String>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub value: Option<serde_json::Value>,
32}
33
34/// A2UI v0.9 deleteSurface payload.
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct DeleteSurface {
38    pub surface_id: String,
39}
40
41/// Envelope: createSurface message.
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct CreateSurfaceMessage {
44    #[serde(rename = "createSurface")]
45    pub create_surface: CreateSurface,
46}
47
48/// Envelope: updateComponents message.
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct UpdateComponentsMessage {
51    #[serde(rename = "updateComponents")]
52    pub update_components: UpdateComponents,
53}
54
55/// Envelope: updateDataModel message.
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct UpdateDataModelMessage {
58    #[serde(rename = "updateDataModel")]
59    pub update_data_model: UpdateDataModel,
60}
61
62/// Envelope: deleteSurface message.
63#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct DeleteSurfaceMessage {
65    #[serde(rename = "deleteSurface")]
66    pub delete_surface: DeleteSurface,
67}
68
69/// A2UI v0.9 message envelope (exactly one of the variants).
70#[derive(Debug, Clone, Serialize, Deserialize)]
71#[serde(untagged)]
72pub enum A2uiMessage {
73    CreateSurface(CreateSurfaceMessage),
74    UpdateComponents(UpdateComponentsMessage),
75    UpdateDataModel(UpdateDataModelMessage),
76    DeleteSurface(DeleteSurfaceMessage),
77}