Skip to main content

ClosureHandler

Struct ClosureHandler 

Source
pub struct ClosureHandler<B: Send + Sync + 'static, C: Clone + Send + 'static> {
    pub backend: Arc<B>,
    pub call_fn: Box<BackendCallFn<B, C>>,
}
Expand description

A JmapHandler that wraps an async closure over a shared backend and forwards CallerCtx to it.

Use this when your handler closures need per-request context — for example, an auth identity that controls which data the handler can access. Closures that don’t need the context can simply ignore the ctx parameter.

§Usage

use jmap_server::{ClosureHandler, Dispatcher};
use std::sync::Arc;

#[derive(Clone)]
struct AuthCtx { user_id: String }

let handler: Arc<ClosureHandler<MyBackend, AuthCtx>> =
    Arc::new(ClosureHandler {
        backend: Arc::new(my_backend),
        call_fn: Box::new(|b, call_id, args, ctx| {
            Box::pin(async move {
                // ctx.user_id is available here
                handle_something(&*b, args, &ctx.user_id).await
            })
        }),
    });

let mut dispatcher: Dispatcher<AuthCtx> = Dispatcher::new();
dispatcher.register("MyMethod/get", handler);

Fields§

§backend: Arc<B>

Shared reference to the backend implementation, passed to the closure on every method call.

§call_fn: Box<BackendCallFn<B, C>>

The async closure invoked for each JMAP method call this handler receives from the dispatcher.

Trait Implementations§

Source§

impl<B: Send + Sync + 'static, C: Clone + Send + 'static> JmapHandler<C> for ClosureHandler<B, C>

Source§

fn call( &self, _method: String, call_id: String, args: Value, caller: C, ) -> HandlerFuture

method is the registered method name for this call. A single handler instance may be registered under multiple names (e.g. both "Foo/get" and "Bar/get"); this parameter lets the handler distinguish between them. Read more

Auto Trait Implementations§

§

impl<B, C> Freeze for ClosureHandler<B, C>

§

impl<B, C> !RefUnwindSafe for ClosureHandler<B, C>

§

impl<B, C> Send for ClosureHandler<B, C>

§

impl<B, C> Sync for ClosureHandler<B, C>

§

impl<B, C> Unpin for ClosureHandler<B, C>

§

impl<B, C> UnsafeUnpin for ClosureHandler<B, C>

§

impl<B, C> !UnwindSafe for ClosureHandler<B, C>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.