lafere_api/
request.rs

1use crate::error::ApiError;
2use crate::message::Action;
3#[cfg(feature = "connection")]
4use crate::{
5	error::Error,
6	message::Message,
7	server::{Data, Session},
8};
9
10#[cfg(feature = "connection")]
11use lafere::standalone_util::PinnedFuture;
12
13/// Basic request definition.
14pub trait Request {
15	type Action: Action;
16	type Response;
17	type Error: ApiError;
18
19	const ACTION: Self::Action;
20}
21
22#[cfg(feature = "connection")]
23pub trait RequestHandler<B> {
24	type Action: Action;
25
26	fn action() -> Self::Action
27	where
28		Self: Sized;
29
30	/// if the data is not available just panic
31	fn validate_data(&self, data: &Data);
32
33	/// handles a message with Self::ACTION as action.
34	///
35	/// if None is returned the request is abandoned and
36	/// the requestor receives a RequestDropped error
37	fn handle<'a>(
38		&'a self,
39		msg: Message<Self::Action, B>,
40		data: &'a Data,
41		session: &'a Session,
42	) -> PinnedFuture<'a, Result<Message<Self::Action, B>, Error>>;
43}