atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: bindings/matrix-sdk-ffi/src/runtime.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
// Copyright 2025 The Matrix.org Foundation C.I.C.
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
// Licensed under the Apache License, Version 2.0 (the "License");
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
// you may not use this file except in compliance with the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
// You may obtain a copy of the License at
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
//     http://www.apache.org/licenses/LICENSE-2.0
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
// Unless required by applicable law or agreed to in writing, software
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
// distributed under the License is distributed on an "AS IS" BASIS,
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
// See the License for the specific language governing permissions and
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
// limitations under the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
//! Runtime abstractions for cross-platform async execution. This provides
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
//! a stand-in for tokio's `get_runtime_handle` method that will work on
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
//! both Wasm and non-Wasm platforms. It also provides corresponding types
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
//! that can be used in place of tokio's `Handle` and `Runtime` types.
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
#[cfg(not(target_family = "wasm"))]
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
mod sys {
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
    pub use tokio::runtime::Handle;
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
    /// Get a runtime handle appropriate for the current target platform.
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
    /// This function returns a unified `Handle` type that works across both
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
    /// Wasm and non-Wasm platforms, allowing code to be written that is
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
    /// agnostic to the platform-specific runtime implementation.
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
    /// Returns:
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
    /// - A `tokio::runtime::Handle` on non-Wasm platforms
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
    /// - A `WasmRuntimeHandle` on Wasm platforms
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
    pub fn get_runtime_handle() -> Handle {
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
        async_compat::get_runtime_handle()
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
#[cfg(target_family = "wasm")]
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
mod sys {
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
    use std::future::Future;
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
    use matrix_sdk_common::executor::{JoinHandle, spawn};
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
    /// A dummy guard that does nothing when dropped.
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
    /// This is used for the Wasm implementation to match
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
    /// tokio::runtime::EnterGuard.
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
    #[derive(Debug)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
    pub struct RuntimeGuard;
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
    /// A runtime handle implementation for WebAssembly targets.
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
    /// This implements a minimal subset of the tokio::runtime::Handle API
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
    /// that is needed for the matrix-rust-sdk to function on Wasm.
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
    #[derive(Default, Debug)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
    pub struct Handle;
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
    pub type Runtime = Handle;
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
    impl Handle {
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
        /// Spawns a future in the wasm32 bindgen runtime.
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
        #[track_caller]
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
        pub fn spawn<F>(&self, future: F) -> JoinHandle<F::Output>
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
        where
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
            F: Future + 'static,
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
            F::Output: 'static,
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
        {
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
            spawn(future)
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
        /// Runs the provided function on an executor dedicated to blocking
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
        /// operations.
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
        #[track_caller]
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
        pub fn spawn_blocking<F, R>(&self, func: F) -> JoinHandle<R>
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
        where
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
            F: FnOnce() -> R + 'static,
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
            R: 'static,
7ff8adafe9e4atagen2026-10-22 12:30 UTC76
        {
7ff8adafe9e4atagen2026-10-22 12:30 UTC77
            spawn(async move { func() })
7ff8adafe9e4atagen2026-10-22 12:30 UTC78
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC79
7ff8adafe9e4atagen2026-10-22 12:30 UTC80
        /// Runs a future to completion on the current thread.
7ff8adafe9e4atagen2026-10-22 12:30 UTC81
        pub fn block_on<F, T>(&self, future: F) -> T
7ff8adafe9e4atagen2026-10-22 12:30 UTC82
        where
7ff8adafe9e4atagen2026-10-22 12:30 UTC83
            F: Future<Output = T>,
7ff8adafe9e4atagen2026-10-22 12:30 UTC84
        {
7ff8adafe9e4atagen2026-10-22 12:30 UTC85
            futures_executor::block_on(future)
7ff8adafe9e4atagen2026-10-22 12:30 UTC86
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC87
7ff8adafe9e4atagen2026-10-22 12:30 UTC88
        /// Enters the runtime context.
7ff8adafe9e4atagen2026-10-22 12:30 UTC89
        ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC90
        /// For WebAssembly, this is a no-op that returns a dummy guard.
7ff8adafe9e4atagen2026-10-22 12:30 UTC91
        pub fn enter(&self) -> RuntimeGuard {
7ff8adafe9e4atagen2026-10-22 12:30 UTC92
            RuntimeGuard
7ff8adafe9e4atagen2026-10-22 12:30 UTC93
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC94
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC95
7ff8adafe9e4atagen2026-10-22 12:30 UTC96
    /// Get a runtime handle appropriate for the current target platform.
7ff8adafe9e4atagen2026-10-22 12:30 UTC97
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC98
    /// This function returns a unified `Handle` type that works across both
7ff8adafe9e4atagen2026-10-22 12:30 UTC99
    /// Wasm and non-Wasm platforms, allowing code to be written that is
7ff8adafe9e4atagen2026-10-22 12:30 UTC100
    /// agnostic to the platform-specific runtime implementation.
7ff8adafe9e4atagen2026-10-22 12:30 UTC101
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC102
    /// Returns:
7ff8adafe9e4atagen2026-10-22 12:30 UTC103
    /// - A `tokio::runtime::Handle` on non-Wasm platforms
7ff8adafe9e4atagen2026-10-22 12:30 UTC104
    /// - A `WasmRuntimeHandle` on Wasm platforms
7ff8adafe9e4atagen2026-10-22 12:30 UTC105
    pub fn get_runtime_handle() -> Handle {
7ff8adafe9e4atagen2026-10-22 12:30 UTC106
        Handle
7ff8adafe9e4atagen2026-10-22 12:30 UTC107
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC108
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC109
7ff8adafe9e4atagen2026-10-22 12:30 UTC110
pub use sys::*;