fire_http/routes/
route.rs

1use super::{ParamsNames, PathParams};
2
3use crate::header::Method;
4use crate::util::PinnedFuture;
5use crate::{Request, Resources, Response};
6
7use std::borrow::Cow;
8
9#[derive(Debug, Clone)]
10pub struct RoutePath {
11	pub method: Option<Method>,
12	pub path: Cow<'static, str>,
13}
14
15/// A `Route` is sort of a request handler
16///
17/// If possible you should use the provided macros which implement Route for
18/// you.
19pub trait Route: Send + Sync {
20	// check if every data you expect is in Data
21	fn validate_requirements(
22		&self,
23		params: &ParamsNames,
24		resources: &Resources,
25	);
26
27	// get's only called once
28	fn path(&self) -> RoutePath;
29
30	fn call<'a>(
31		&'a self,
32		req: &'a mut Request,
33		params: &'a PathParams,
34		resources: &'a Resources,
35	) -> PinnedFuture<'a, crate::Result<Response>>;
36}