use crate::message::{Message, Action};
use crate::error::{Error, ApiError};
use crate::server::{Data, Session};
use stream::util::PinnedFuture;
pub trait Request {
type Action: Action;
type Response;
type Error: ApiError;
const ACTION: Self::Action;
}
pub trait RequestHandler<B> {
type Action: Action;
fn action() -> Self::Action
where Self: Sized;
fn validate_data(&self, data: &Data);
fn handle<'a>(
&'a self,
msg: Message<Self::Action, B>,
data: &'a Data,
session: &'a Session
) -> PinnedFuture<'a, Result<Message<Self::Action, B>, Error>>;
}