#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
pub(crate) struct ForceSendFuture<F>(F);
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
#[expect(unsafe_code)]
unsafe impl<F> Send for ForceSendFuture<F> {}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
impl<F: Future> Future for ForceSendFuture<F> {
type Output = F::Output;
#[expect(unsafe_code)] fn poll(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Self::Output> {
let inner = unsafe { std::pin::Pin::new_unchecked(&mut self.get_unchecked_mut().0) };
inner.poll(cx)
}
}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub(crate) fn make_future_send_on_wasm<F>(fut: F) -> F {
fut
}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
pub(crate) fn make_future_send_on_wasm<F>(fut: F) -> ForceSendFuture<F> {
ForceSendFuture(fut)
}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub(crate) trait SendIfNotWasm: Send {}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
impl<T: Send> SendIfNotWasm for T {}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
pub(crate) trait SendIfNotWasm {}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
impl<T> SendIfNotWasm for T {}