lambda_router/runtime/
try_route.rs1use lambda_http::{http::Method, RequestExt, RequestPayloadExt};
5use serde::de::DeserializeOwned;
6
7use super::error::Error;
8
9pub fn try_route<T: DeserializeOwned>(
17 event: &lambda_http::Request,
18 method: lambda_http::http::Method,
19 route: &str,
20 inbound: Option<&str>,
21) -> Result<T, Error> {
22 if inbound.map(|el| el != route).unwrap_or_default() {
23 return Err(Error::NotFound);
24 }
25 if event.method() != method {
26 return Err(Error::MethodNotAllowed);
27 }
28
29 match event.method() {
30 &Method::GET | &Method::DELETE => {
31 let qs = event.query_string_parameters().to_query_string();
32 Ok(serde_urlencoded::from_str(&qs)?)
33 }
34 _ => match event.payload() {
35 Ok(Some(payload)) => Ok(payload),
36 Ok(None) => Err(Error::NoPayload),
37 Err(err) => Err(Error::Payload(err)),
38 },
39 }
40}