aws_lambda_events/event/iot_1_click/
mod.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4use crate::custom_serde::deserialize_lambda_map;
5
6#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
9#[serde(rename_all = "camelCase")]
10pub struct IoTOneClickEvent {
11 pub device_event: IoTOneClickDeviceEvent,
12 pub device_info: IoTOneClickDeviceInfo,
13 pub placement_info: IoTOneClickPlacementInfo,
14}
15
16#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
17#[serde(rename_all = "camelCase")]
18pub struct IoTOneClickDeviceEvent {
19 pub button_clicked: IoTOneClickButtonClicked,
20}
21
22#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
23#[serde(rename_all = "camelCase")]
24pub struct IoTOneClickButtonClicked {
25 #[serde(default)]
26 pub click_type: Option<String>,
27 #[serde(default)]
28 pub reported_time: Option<String>,
29}
30
31#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
32#[serde(rename_all = "camelCase")]
33pub struct IoTOneClickDeviceInfo {
34 #[serde(deserialize_with = "deserialize_lambda_map")]
35 #[serde(default)]
36 pub attributes: HashMap<String, String>,
37 #[serde(default)]
38 pub type_: Option<String>,
39 #[serde(default)]
40 pub device_id: Option<String>,
41 pub remaining_life: f64,
42}
43
44#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
45#[serde(rename_all = "camelCase")]
46pub struct IoTOneClickPlacementInfo {
47 #[serde(default)]
48 pub project_name: Option<String>,
49 #[serde(default)]
50 pub placement_name: Option<String>,
51 #[serde(deserialize_with = "deserialize_lambda_map")]
52 #[serde(default)]
53 pub attributes: HashMap<String, String>,
54 #[serde(deserialize_with = "deserialize_lambda_map")]
55 #[serde(default)]
56 pub devices: HashMap<String, String>,
57}
58
59#[cfg(test)]
60mod test {
61 use super::*;
62
63 #[test]
64 #[cfg(feature = "iot_1_click")]
65 fn example_iot_1_click_event() {
66 let data = include_bytes!("../../fixtures/example-iot_1_click-event.json");
67 let parsed: IoTOneClickEvent = serde_json::from_slice(data).unwrap();
68 let output: String = serde_json::to_string(&parsed).unwrap();
69 let reparsed: IoTOneClickEvent = serde_json::from_slice(output.as_bytes()).unwrap();
70 assert_eq!(parsed, reparsed);
71 }
72}