aws_lambda_events/event/iot/
mod.rs1use crate::{custom_serde::serialize_headers, encodings::Base64Data, iam::IamPolicyDocument};
2use http::HeaderMap;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
8#[serde(rename_all = "camelCase")]
9pub struct IoTCoreCustomAuthorizerRequest {
10 #[serde(default)]
11 pub token: Option<String>,
12 pub signature_verified: bool,
13 pub protocols: Vec<String>,
14 pub protocol_data: Option<IoTCoreProtocolData>,
15 pub connection_metadata: Option<IoTCoreConnectionMetadata>,
16}
17
18#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
19#[serde(rename_all = "camelCase")]
20pub struct IoTCoreProtocolData {
21 pub tls: Option<IoTCoreTlsContext>,
22 pub http: Option<IoTCoreHttpContext>,
23 pub mqtt: Option<IoTCoreMqttContext>,
24}
25
26#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
27#[serde(rename_all = "camelCase")]
28pub struct IoTCoreTlsContext {
29 #[serde(default)]
30 pub server_name: Option<String>,
31}
32
33#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
34#[serde(rename_all = "camelCase")]
35pub struct IoTCoreHttpContext {
36 #[serde(deserialize_with = "http_serde::header_map::deserialize", default)]
37 #[serde(serialize_with = "serialize_headers")]
38 pub headers: HeaderMap,
39 #[serde(default)]
40 pub query_string: Option<String>,
41}
42
43#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
44#[serde(rename_all = "camelCase")]
45pub struct IoTCoreMqttContext {
46 #[serde(default)]
47 pub client_id: Option<String>,
48 pub password: Base64Data,
49 #[serde(default)]
50 pub username: Option<String>,
51}
52
53#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
54#[serde(rename_all = "camelCase")]
55pub struct IoTCoreConnectionMetadata {
56 #[serde(default)]
57 pub id: Option<String>,
58}
59
60#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize)]
63#[serde(rename_all = "camelCase")]
64pub struct IoTCoreCustomAuthorizerResponse {
65 pub is_authenticated: bool,
66 #[serde(default)]
67 pub principal_id: Option<String>,
68 pub disconnect_after_in_seconds: u32,
69 pub refresh_after_in_seconds: u32,
70 pub policy_documents: Vec<Option<IamPolicyDocument>>,
71}
72
73#[cfg(test)]
74mod test {
75 use super::*;
76
77 #[test]
78 #[cfg(feature = "iot")]
79 fn example_iot_custom_auth_request() {
80 let data = include_bytes!("../../fixtures/example-iot-custom-auth-request.json");
81 let parsed: IoTCoreCustomAuthorizerRequest = serde_json::from_slice(data).unwrap();
82 let output: String = serde_json::to_string(&parsed).unwrap();
83 let reparsed: IoTCoreCustomAuthorizerRequest = serde_json::from_slice(output.as_bytes()).unwrap();
84 assert_eq!(parsed, reparsed);
85 }
86
87 #[test]
88 #[cfg(feature = "iot")]
89 fn example_iot_custom_auth_response() {
90 let data = include_bytes!("../../fixtures/example-iot-custom-auth-response.json");
91 let parsed: IoTCoreCustomAuthorizerResponse = serde_json::from_slice(data).unwrap();
92 let output: String = serde_json::to_string(&parsed).unwrap();
93 let reparsed: IoTCoreCustomAuthorizerResponse = serde_json::from_slice(output.as_bytes()).unwrap();
94 assert_eq!(parsed, reparsed);
95 }
96}