1use aws_lambda_events::event::alb::{
2 AlbTargetGroupRequest as Request
3};
4
5use mu_runtime::Context;
6use mu_runtime::Error;
7
8pub trait AlbDeserialize<T> {
9 fn from_alb_request(req: Request, ctx: Context) -> Result<T, Error>;
10}
11
12impl AlbDeserialize<Request> for Request {
13 fn from_alb_request(
14 req: Request,
15 _: Context,
16 ) -> Result<Request, Error> {
17 Ok(req)
18 }
19}
20
21pub trait RpcRequest {}
22
23impl<T> AlbDeserialize<T> for T
24where
25 T: for<'de> serde::Deserialize<'de> + RpcRequest,
26{
27 fn from_alb_request(req: Request, _ctx: Context) -> Result<T, Error> {
28 match &req.body {
29 Some(body) => match serde_json::from_str(body) {
30 Ok(deserialized) => Ok(deserialized),
31 Err(cause) => Err(format!("Failed {:?}", cause).into()),
32 },
33 None => Err("No payload defined".into()),
34 }
35 }
36}