mu_alb/
deserializer.rs

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}