Skip to main content

multistore/
maybe_send.rs

1//! Conditional `Send`/`Sync` bounds for traits whose wasm implementations
2//! use `!Send` types (JS interop via `Rc<RefCell<...>>`, `JsValue`, etc.).
3//!
4//! On native targets, `MaybeSend` resolves to `Send` and `MaybeSync` to
5//! `Sync`. On `wasm32` targets, both are no-ops.
6//!
7//! Used by traits whose implementations may hold `!Send` types on WASM:
8//! [`ProxyBackend`](crate::backend::ProxyBackend),
9//! [`Middleware`](crate::middleware::Middleware),
10//! [`RouteHandler`](crate::route_handler::RouteHandler),
11//! [`BucketRegistry`](crate::registry::BucketRegistry),
12//! [`CredentialRegistry`](crate::registry::CredentialRegistry), and the
13//! `oidc-provider` crate's [`HttpExchange`] / [`CredentialExchange`] traits.
14
15// --- Native targets: MaybeSend = Send, MaybeSync = Sync ---
16
17#[cfg(not(target_arch = "wasm32"))]
18pub trait MaybeSend: Send {}
19#[cfg(not(target_arch = "wasm32"))]
20impl<T: Send> MaybeSend for T {}
21
22#[cfg(not(target_arch = "wasm32"))]
23pub trait MaybeSync: Sync {}
24#[cfg(not(target_arch = "wasm32"))]
25impl<T: Sync> MaybeSync for T {}
26
27// --- WASM targets: MaybeSend and MaybeSync are no-ops ---
28
29#[cfg(target_arch = "wasm32")]
30pub trait MaybeSend {}
31#[cfg(target_arch = "wasm32")]
32impl<T> MaybeSend for T {}
33
34#[cfg(target_arch = "wasm32")]
35pub trait MaybeSync {}
36#[cfg(target_arch = "wasm32")]
37impl<T> MaybeSync for T {}