use super::connection::WebSocketGatewayConnection;
use super::context::WebSocketGatewayInitContext;
use crate::{BoxFuture, Result};
use std::future::Future;
pub trait WebSocketGatewayInitHook: Send + Sync + 'static {
fn after_init(&self, context: WebSocketGatewayInitContext) -> BoxFuture<'static, Result<()>>;
}
impl<F, Fut> WebSocketGatewayInitHook for F
where
F: Fn(WebSocketGatewayInitContext) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
{
fn after_init(&self, context: WebSocketGatewayInitContext) -> BoxFuture<'static, Result<()>> {
Box::pin(self(context))
}
}
pub trait WebSocketGatewayConnectionHook: Send + Sync + 'static {
fn handle_connection(
&self,
connection: WebSocketGatewayConnection,
) -> BoxFuture<'static, Result<()>>;
}
impl<F, Fut> WebSocketGatewayConnectionHook for F
where
F: Fn(WebSocketGatewayConnection) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
{
fn handle_connection(
&self,
connection: WebSocketGatewayConnection,
) -> BoxFuture<'static, Result<()>> {
Box::pin(self(connection))
}
}
pub trait WebSocketGatewayDisconnectHook: Send + Sync + 'static {
fn handle_disconnect(
&self,
connection: WebSocketGatewayConnection,
) -> BoxFuture<'static, Result<()>>;
}
impl<F, Fut> WebSocketGatewayDisconnectHook for F
where
F: Fn(WebSocketGatewayConnection) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
{
fn handle_disconnect(
&self,
connection: WebSocketGatewayConnection,
) -> BoxFuture<'static, Result<()>> {
Box::pin(self(connection))
}
}