ConnectHandler

Trait ConnectHandler 

Source
pub trait ConnectHandler<A: Adapter, T>:
    Sized
    + Clone
    + Send
    + Sync
    + 'static {
    // Required method
    fn call(&self, s: Arc<Socket<A>>, auth: Option<Value>);

    // Provided methods
    fn call_middleware<'a>(
        &'a self,
        _: Arc<Socket<A>>,
        _: &'a Option<Value>,
    ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn Display + Send>>> + Send + 'a>> { ... }
    fn with<M, T1>(self, middleware: M) -> impl ConnectHandler<A, T>
       where M: ConnectMiddleware<A, T1> + Send + Sync + 'static,
             T: Send + Sync + 'static,
             T1: Send + Sync + 'static { ... }
}
Expand description

Define a handler for the connect event. It is implemented for closures with up to 16 arguments. They must implement the FromConnectParts trait.

  • See the connect module doc for more details on connect handler.
  • See the extract module doc for more details on available extractors.

Required Methods§

Source

fn call(&self, s: Arc<Socket<A>>, auth: Option<Value>)

Call the handler with the given arguments.

Provided Methods§

Source

fn call_middleware<'a>( &'a self, _: Arc<Socket<A>>, _: &'a Option<Value>, ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn Display + Send>>> + Send + 'a>>

Call the middleware with the given arguments.

Source

fn with<M, T1>(self, middleware: M) -> impl ConnectHandler<A, T>
where M: ConnectMiddleware<A, T1> + Send + Sync + 'static, T: Send + Sync + 'static, T1: Send + Sync + 'static,

Wraps this ConnectHandler with a new ConnectMiddleware. The new provided middleware will be called before the current one.

§Example
async fn handler(s: SocketRef) {
    println!("socket connected on / namespace with id: {}", s.id);
}

#[derive(Debug)]
struct AuthError;
impl std::fmt::Display for AuthError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "AuthError")
    }
}
impl std::error::Error for AuthError {}

async fn middleware(s: SocketRef, Data(token): Data<String>) -> Result<(), AuthError> {
    println!("second middleware called");
    if token != "secret" {
        Err(AuthError)
    } else {
        Ok(())
    }
}

async fn other_middleware(s: SocketRef) -> Result<(), AuthError> {
    println!("first middleware called");
    if s.req_parts().uri.query().map(|q| q.contains("secret")).unwrap_or_default() {
        Err(AuthError)
    } else {
        Ok(())
    }
}

let (_, io) = SocketIo::new_layer();
io.ns("/", handler.with(middleware).with(other_middleware));

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<A, F, Fut> ConnectHandler<A, ()> for F
where F: FnOnce() -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter,

Source§

impl<A, F, Fut, T1> ConnectHandler<A, (T1,)> for F
where F: FnOnce(T1) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2> ConnectHandler<A, (T1, T2)> for F
where F: FnOnce(T1, T2) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3> ConnectHandler<A, (T1, T2, T3)> for F
where F: FnOnce(T1, T2, T3) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4> ConnectHandler<A, (T1, T2, T3, T4)> for F
where F: FnOnce(T1, T2, T3, T4) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5> ConnectHandler<A, (T1, T2, T3, T4, T5)> for F
where F: FnOnce(T1, T2, T3, T4, T5) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6> ConnectHandler<A, (T1, T2, T3, T4, T5, T6)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send, T12: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send, T12: FromConnectParts<A> + Send, T13: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send, T12: FromConnectParts<A> + Send, T13: FromConnectParts<A> + Send, T14: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send, T12: FromConnectParts<A> + Send, T13: FromConnectParts<A> + Send, T14: FromConnectParts<A> + Send, T15: FromConnectParts<A> + Send,

Source§

impl<A, F, Fut, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> ConnectHandler<A, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)> for F
where F: FnOnce(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> Fut + Send + Sync + Clone + 'static, Fut: Future<Output = ()> + Send + 'static, A: Adapter, T1: FromConnectParts<A> + Send, T2: FromConnectParts<A> + Send, T3: FromConnectParts<A> + Send, T4: FromConnectParts<A> + Send, T5: FromConnectParts<A> + Send, T6: FromConnectParts<A> + Send, T7: FromConnectParts<A> + Send, T8: FromConnectParts<A> + Send, T9: FromConnectParts<A> + Send, T10: FromConnectParts<A> + Send, T11: FromConnectParts<A> + Send, T12: FromConnectParts<A> + Send, T13: FromConnectParts<A> + Send, T14: FromConnectParts<A> + Send, T15: FromConnectParts<A> + Send, T16: FromConnectParts<A> + Send,