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
13pub 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 fn validate_data(&self, data: &Data);
32
33 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}