v2_app_builder_CreateApp/
v2_app-builder_CreateApp.rs

1// Create App returns "Created" response
2use datadog_api_client::datadog;
3use datadog_api_client::datadogV2::api_app_builder::AppBuilderAPI;
4use datadog_api_client::datadogV2::model::ActionQuery;
5use datadog_api_client::datadogV2::model::ActionQueryProperties;
6use datadog_api_client::datadogV2::model::ActionQuerySpec;
7use datadog_api_client::datadogV2::model::ActionQuerySpecInputs;
8use datadog_api_client::datadogV2::model::ActionQuerySpecObject;
9use datadog_api_client::datadogV2::model::ActionQueryType;
10use datadog_api_client::datadogV2::model::AppBuilderEvent;
11use datadog_api_client::datadogV2::model::AppBuilderEventName;
12use datadog_api_client::datadogV2::model::AppBuilderEventType;
13use datadog_api_client::datadogV2::model::AppDefinitionType;
14use datadog_api_client::datadogV2::model::Component;
15use datadog_api_client::datadogV2::model::ComponentGrid;
16use datadog_api_client::datadogV2::model::ComponentGridProperties;
17use datadog_api_client::datadogV2::model::ComponentGridType;
18use datadog_api_client::datadogV2::model::ComponentProperties;
19use datadog_api_client::datadogV2::model::ComponentPropertiesIsVisible;
20use datadog_api_client::datadogV2::model::ComponentType;
21use datadog_api_client::datadogV2::model::CreateAppRequest;
22use datadog_api_client::datadogV2::model::CreateAppRequestData;
23use datadog_api_client::datadogV2::model::CreateAppRequestDataAttributes;
24use datadog_api_client::datadogV2::model::DataTransform;
25use datadog_api_client::datadogV2::model::DataTransformProperties;
26use datadog_api_client::datadogV2::model::DataTransformType;
27use datadog_api_client::datadogV2::model::Query;
28use datadog_api_client::datadogV2::model::StateVariable;
29use datadog_api_client::datadogV2::model::StateVariableProperties;
30use datadog_api_client::datadogV2::model::StateVariableType;
31use serde_json::Value;
32use std::collections::BTreeMap;
33use uuid::Uuid;
34
35#[tokio::main]
36async fn main() {
37    let body =
38        CreateAppRequest
39        ::new().data(
40            CreateAppRequestData::new(
41                AppDefinitionType::APPDEFINITIONS,
42            ).attributes(
43                CreateAppRequestDataAttributes::new()
44                    .components(
45                        vec![
46                            ComponentGrid::new(
47                                "grid0".to_string(),
48                                ComponentGridProperties::new()
49                                    .background_color("default".to_string())
50                                    .children(
51                                        vec![
52                                            Component::new(
53                                                "gridCell0".to_string(),
54                                                ComponentProperties::new()
55                                                    .children(
56                                                        vec![
57                                                            Component::new(
58                                                                "text0".to_string(),
59                                                                ComponentProperties
60                                                                ::new().is_visible(
61                                                                    ComponentPropertiesIsVisible::Bool(true),
62                                                                ),
63                                                                ComponentType::TEXT,
64                                                            ).events(vec![])
65                                                        ],
66                                                    )
67                                                    .is_visible(
68                                                        ComponentPropertiesIsVisible::String("true".to_string()),
69                                                    ),
70                                                ComponentType::GRIDCELL,
71                                            ).events(vec![]),
72                                            Component::new(
73                                                "gridCell2".to_string(),
74                                                ComponentProperties::new()
75                                                    .children(
76                                                        vec![
77                                                            Component::new(
78                                                                "table0".to_string(),
79                                                                ComponentProperties
80                                                                ::new().is_visible(
81                                                                    ComponentPropertiesIsVisible::Bool(true),
82                                                                ),
83                                                                ComponentType::TABLE,
84                                                            ).events(vec![])
85                                                        ],
86                                                    )
87                                                    .is_visible(
88                                                        ComponentPropertiesIsVisible::String("true".to_string()),
89                                                    ),
90                                                ComponentType::GRIDCELL,
91                                            ).events(vec![]),
92                                            Component::new(
93                                                "gridCell1".to_string(),
94                                                ComponentProperties::new()
95                                                    .children(
96                                                        vec![
97                                                            Component::new(
98                                                                "text1".to_string(),
99                                                                ComponentProperties
100                                                                ::new().is_visible(
101                                                                    ComponentPropertiesIsVisible::Bool(true),
102                                                                ),
103                                                                ComponentType::TEXT,
104                                                            ).events(vec![])
105                                                        ],
106                                                    )
107                                                    .is_visible(
108                                                        ComponentPropertiesIsVisible::String("true".to_string()),
109                                                    ),
110                                                ComponentType::GRIDCELL,
111                                            ).events(vec![]),
112                                            Component::new(
113                                                "gridCell3".to_string(),
114                                                ComponentProperties::new()
115                                                    .children(
116                                                        vec![
117                                                            Component::new(
118                                                                "button0".to_string(),
119                                                                ComponentProperties
120                                                                ::new().is_visible(
121                                                                    ComponentPropertiesIsVisible::Bool(true),
122                                                                ),
123                                                                ComponentType::BUTTON,
124                                                            ).events(
125                                                                vec![
126                                                                    AppBuilderEvent::new()
127                                                                        .name(AppBuilderEventName::CLICK)
128                                                                        .type_(
129                                                                            AppBuilderEventType::SETSTATEVARIABLEVALUE,
130                                                                        )
131                                                                ],
132                                                            )
133                                                        ],
134                                                    )
135                                                    .is_visible(
136                                                        ComponentPropertiesIsVisible::String("true".to_string()),
137                                                    ),
138                                                ComponentType::GRIDCELL,
139                                            ).events(vec![]),
140                                            Component::new(
141                                                "gridCell4".to_string(),
142                                                ComponentProperties::new()
143                                                    .children(
144                                                        vec![
145                                                            Component::new(
146                                                                "button1".to_string(),
147                                                                ComponentProperties
148                                                                ::new().is_visible(
149                                                                    ComponentPropertiesIsVisible::Bool(true),
150                                                                ),
151                                                                ComponentType::BUTTON,
152                                                            ).events(
153                                                                vec![
154                                                                    AppBuilderEvent::new()
155                                                                        .name(AppBuilderEventName::CLICK)
156                                                                        .type_(
157                                                                            AppBuilderEventType::SETSTATEVARIABLEVALUE,
158                                                                        )
159                                                                ],
160                                                            )
161                                                        ],
162                                                    )
163                                                    .is_visible(
164                                                        ComponentPropertiesIsVisible::String("true".to_string()),
165                                                    ),
166                                                ComponentType::GRIDCELL,
167                                            ).events(vec![])
168                                        ],
169                                    ),
170                                ComponentGridType::GRID,
171                            ).events(vec![])
172                        ],
173                    )
174                    .description(
175                        "This is a slightly complicated example app that fetches and displays cat facts".to_string(),
176                    )
177                    .name("Example Cat Facts Viewer".to_string())
178                    .queries(
179                        vec![
180                            Query::ActionQuery(
181                                Box::new(
182                                    ActionQuery::new(
183                                        Uuid::parse_str(
184                                            "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5",
185                                        ).expect("invalid UUID"),
186                                        "fetchFacts".to_string(),
187                                        ActionQueryProperties::new(
188                                            ActionQuerySpec::ActionQuerySpecObject(
189                                                Box::new(
190                                                    ActionQuerySpecObject::new(
191                                                        "com.datadoghq.http.request".to_string(),
192                                                    )
193                                                        .connection_id(
194                                                            "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3".to_string(),
195                                                        )
196                                                        .inputs(
197                                                            ActionQuerySpecInputs::ActionQuerySpecInput(
198                                                                BTreeMap::from(
199                                                                    [
200                                                                        ("verb".to_string(), Value::from("GET")),
201                                                                        (
202                                                                            "url".to_string(),
203                                                                            Value::from(
204                                                                                "https://catfact.ninja/facts",
205                                                                            ),
206                                                                        ),
207                                                                    ],
208                                                                ),
209                                                            ),
210                                                        ),
211                                                ),
212                                            ),
213                                        ),
214                                        ActionQueryType::ACTION,
215                                    ).events(vec![]),
216                                ),
217                            ),
218                            Query::StateVariable(
219                                Box::new(
220                                    StateVariable::new(
221                                        Uuid::parse_str(
222                                            "afd03c81-4075-4432-8618-ba09d52d2f2d",
223                                        ).expect("invalid UUID"),
224                                        "pageSize".to_string(),
225                                        StateVariableProperties::new().default_value(Value::from("${20}")),
226                                        StateVariableType::STATEVARIABLE,
227                                    ),
228                                ),
229                            ),
230                            Query::DataTransform(
231                                Box::new(
232                                    DataTransform::new(
233                                        Uuid::parse_str(
234                                            "0fb22859-47dc-4137-9e41-7b67d04c525c",
235                                        ).expect("invalid UUID"),
236                                        "randomFact".to_string(),
237                                        DataTransformProperties
238                                        ::new().outputs(
239                                            r#"${(() => {const facts = fetchFacts.outputs.body.data
240return facts[Math.floor(Math.random()*facts.length)]
241})()}"#.to_string(),
242                                        ),
243                                        DataTransformType::DATATRANSFORM,
244                                    ),
245                                ),
246                            )
247                        ],
248                    )
249                    .root_instance_name("grid0".to_string()),
250            ),
251        );
252    let configuration = datadog::Configuration::new();
253    let api = AppBuilderAPI::with_config(configuration);
254    let resp = api.create_app(body).await;
255    if let Ok(value) = resp {
256        println!("{:#?}", value);
257    } else {
258        println!("{:#?}", resp.unwrap_err());
259    }
260}