Skip to content

Commit f610ff6

Browse files
mawallaceMichael Wallace
andauthored
Add CloudFormationCustomResourceResponse struct. (#838)
Co-authored-by: Michael Wallace <[email protected]>
1 parent 29e148a commit f610ff6

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

lambda-events/src/event/cloudformation/mod.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use serde::{de::DeserializeOwned, Deserialize, Serialize};
22
use serde_json::Value;
3+
use std::collections::HashMap;
34

45
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
56
#[serde(tag = "RequestType")]
@@ -75,6 +76,26 @@ where
7576
pub resource_properties: P2,
7677
}
7778

79+
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
80+
#[serde(rename_all = "PascalCase")]
81+
pub struct CloudFormationCustomResourceResponse {
82+
pub status: CloudFormationCustomResourceResponseStatus,
83+
pub reason: Option<String>,
84+
pub physical_resource_id: String,
85+
pub stack_id: String,
86+
pub request_id: String,
87+
pub logical_resource_id: String,
88+
pub no_echo: bool,
89+
pub data: HashMap<String, String>,
90+
}
91+
92+
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
93+
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
94+
pub enum CloudFormationCustomResourceResponseStatus {
95+
Success,
96+
Failed,
97+
}
98+
7899
#[cfg(test)]
79100
mod test {
80101
use std::collections::HashMap;
@@ -136,4 +157,13 @@ mod test {
136157
let reparsed: TestRequest = serde_json::from_slice(output.as_bytes()).unwrap();
137158
assert_eq!(parsed, reparsed);
138159
}
160+
161+
#[test]
162+
fn example_cloudformation_custom_resource_response() {
163+
let data = include_bytes!("../../fixtures/example-cloudformation-custom-resource-response.json");
164+
let parsed: CloudFormationCustomResourceResponse = serde_json::from_slice(data).unwrap();
165+
let output: String = serde_json::to_string(&parsed).unwrap();
166+
let reparsed: CloudFormationCustomResourceResponse = serde_json::from_slice(output.as_bytes()).unwrap();
167+
assert_eq!(parsed, reparsed);
168+
}
139169
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"Status": "FAILED",
3+
"Reason": "This is a test failure.",
4+
"PhysicalResourceId": "custom-resource-f4bd5382-3de3-4caf-b7ad-1be06b899647",
5+
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/stack-name/16580499-7622-4a9c-b32f-4eba35da93da",
6+
"RequestId": "49347ca5-c603-44e5-a34b-10cf1854a887",
7+
"LogicalResourceId": "CustomResource",
8+
"NoEcho": false,
9+
"Data": {
10+
"Key1": "a",
11+
"Key2": "b",
12+
"Key3": "c"
13+
}
14+
}

0 commit comments

Comments
 (0)