aws_lambda_events/event/autoscaling/
mod.rs

1use chrono::{DateTime, Utc};
2use serde::{de::DeserializeOwned, Deserialize, Serialize};
3use serde_json::Value;
4use std::collections::HashMap;
5
6use crate::custom_serde::deserialize_lambda_map;
7
8/// `AutoScalingEvent` struct is used to parse the json for auto scaling event types //
9#[derive(Debug, Default, Clone, Eq, PartialEq, Deserialize, Serialize)]
10#[serde(rename_all = "camelCase")]
11pub struct AutoScalingEvent<T1 = Value>
12where
13    T1: DeserializeOwned,
14    T1: Serialize,
15{
16    /// The version of event data
17    #[serde(default)]
18    pub version: Option<String>,
19    /// The unique ID of the event
20    #[serde(default)]
21    pub id: Option<String>,
22    /// Details about event type
23    #[serde(default)]
24    #[serde(rename = "detail-type")]
25    pub detail_type: Option<String>,
26    /// Source of the event
27    #[serde(default)]
28    pub source: Option<String>,
29    /// AccountId
30    #[serde(default)]
31    #[serde(rename = "account")]
32    pub account_id: Option<String>,
33    /// Event timestamp
34    pub time: DateTime<Utc>,
35    /// Region of event
36    #[serde(default)]
37    pub region: Option<String>,
38    /// Information about resources impacted by event
39    pub resources: Vec<String>,
40    #[serde(deserialize_with = "deserialize_lambda_map")]
41    #[serde(default)]
42    #[serde(bound = "")]
43    pub detail: HashMap<String, T1>,
44    /// Catchall to catch any additional fields that were present but not explicitly defined by this struct.
45    /// Enabled with Cargo feature `catch-all-fields`.
46    /// If `catch-all-fields` is disabled, any additional fields that are present will be ignored.
47    #[cfg(feature = "catch-all-fields")]
48    #[cfg_attr(docsrs, doc(cfg(feature = "catch-all-fields")))]
49    #[serde(flatten)]
50    pub other: serde_json::Map<String, Value>,
51}
52
53#[cfg(test)]
54mod test {
55    use super::*;
56
57    #[test]
58    #[cfg(feature = "autoscaling")]
59    fn example_autoscaling_event_launch_successful() {
60        let data = include_bytes!("../../fixtures/example-autoscaling-event-launch-successful.json");
61        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
62        let output: String = serde_json::to_string(&parsed).unwrap();
63        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
64        assert_eq!(parsed, reparsed);
65    }
66
67    #[test]
68    #[cfg(feature = "autoscaling")]
69    fn example_autoscaling_event_launch_unsuccessful() {
70        let data = include_bytes!("../../fixtures/example-autoscaling-event-launch-unsuccessful.json");
71        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
72        let output: String = serde_json::to_string(&parsed).unwrap();
73        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
74        assert_eq!(parsed, reparsed);
75    }
76
77    #[test]
78    #[cfg(feature = "autoscaling")]
79    fn example_autoscaling_event_lifecycle_action() {
80        let data = include_bytes!("../../fixtures/example-autoscaling-event-lifecycle-action.json");
81        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
82        let output: String = serde_json::to_string(&parsed).unwrap();
83        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
84        assert_eq!(parsed, reparsed);
85    }
86
87    #[test]
88    #[cfg(feature = "autoscaling")]
89    fn example_autoscaling_event_terminate_action() {
90        let data = include_bytes!("../../fixtures/example-autoscaling-event-terminate-action.json");
91        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
92        let output: String = serde_json::to_string(&parsed).unwrap();
93        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
94        assert_eq!(parsed, reparsed);
95    }
96
97    #[test]
98    #[cfg(feature = "autoscaling")]
99    fn example_autoscaling_event_terminate_successful() {
100        let data = include_bytes!("../../fixtures/example-autoscaling-event-terminate-successful.json");
101        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
102        let output: String = serde_json::to_string(&parsed).unwrap();
103        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
104        assert_eq!(parsed, reparsed);
105    }
106
107    #[test]
108    #[cfg(feature = "autoscaling")]
109    fn example_autoscaling_event_terminate_unsuccessful() {
110        let data = include_bytes!("../../fixtures/example-autoscaling-event-terminate-unsuccessful.json");
111        let parsed: AutoScalingEvent = serde_json::from_slice(data).unwrap();
112        let output: String = serde_json::to_string(&parsed).unwrap();
113        let reparsed: AutoScalingEvent = serde_json::from_slice(output.as_bytes()).unwrap();
114        assert_eq!(parsed, reparsed);
115    }
116}