a2ui_types/v08/
data_model.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(deny_unknown_fields)]
7pub struct BoundValue {
8 #[serde(rename = "literalString", skip_serializing_if = "Option::is_none")]
10 pub literal_string: Option<String>,
11
12 #[serde(rename = "literalNumber", skip_serializing_if = "Option::is_none")]
14 pub literal_number: Option<f64>,
15
16 #[serde(rename = "literalBoolean", skip_serializing_if = "Option::is_none")]
18 pub literal_boolean: Option<bool>,
19
20 #[serde(rename = "literalArray", skip_serializing_if = "Option::is_none")]
22 pub literal_array: Option<Vec<serde_json::Value>>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub path: Option<String>,
27}
28
29impl BoundValue {
30 pub fn from_literal_string(s: impl Into<String>) -> Self {
32 Self {
33 literal_string: Some(s.into()),
34 literal_number: None,
35 literal_boolean: None,
36 literal_array: None,
37 path: None,
38 }
39 }
40
41 pub fn from_path(path: impl Into<String>) -> Self {
43 Self {
44 literal_string: None,
45 literal_number: None,
46 literal_boolean: None,
47 literal_array: None,
48 path: Some(path.into()),
49 }
50 }
51
52 pub fn from_path_with_default(path: impl Into<String>, default: impl Into<String>) -> Self {
54 Self {
55 literal_string: Some(default.into()),
56 literal_number: None,
57 literal_boolean: None,
58 literal_array: None,
59 path: Some(path.into()),
60 }
61 }
62}
63
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[serde(deny_unknown_fields)]
68pub struct Children {
69 #[serde(rename = "explicitList", skip_serializing_if = "Option::is_none")]
71 pub explicit_list: Option<Vec<String>>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub template: Option<ChildTemplate>,
76}
77
78impl Children {
79 pub fn from_explicit_list(ids: Vec<String>) -> Self {
81 Self {
82 explicit_list: Some(ids),
83 template: None,
84 }
85 }
86
87 pub fn from_template(template: ChildTemplate) -> Self {
89 Self {
90 explicit_list: None,
91 template: Some(template),
92 }
93 }
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
98#[serde(deny_unknown_fields)]
99pub struct ChildTemplate {
100 #[serde(rename = "dataBinding")]
102 pub data_binding: String,
103
104 #[serde(rename = "componentId")]
106 pub component_id: String,
107}
108
109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
112pub struct DataEntry {
113 pub key: String,
115
116 #[serde(rename = "valueString", skip_serializing_if = "Option::is_none")]
118 pub value_string: Option<String>,
119
120 #[serde(rename = "valueNumber", skip_serializing_if = "Option::is_none")]
122 pub value_number: Option<f64>,
123
124 #[serde(rename = "valueBoolean", skip_serializing_if = "Option::is_none")]
126 pub value_boolean: Option<bool>,
127
128 #[serde(rename = "valueMap", skip_serializing_if = "Option::is_none")]
130 pub value_map: Option<Vec<DataEntry>>,
131}
132
133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
135pub struct Action {
136 pub name: String,
138
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub context: Option<Vec<ActionContextEntry>>,
142}
143
144#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
146pub struct ActionContextEntry {
147 pub key: String,
149
150 pub value: BoundValue,
152}