flutter_rust_bridge/handler/
executor.rs

1use crate::codec::BaseCodec;
2use crate::handler::handler::{TaskContext, TaskInfo, TaskRetFutTrait};
3use std::future::Future;
4
5/// An executor model for Rust functions.
6///
7/// For example, the default model is [SimpleExecutor]
8/// which runs each function in a separate thread.
9pub trait Executor {
10    /// Executes a Rust function and transforms its return value into a Dart-compatible
11    /// value, i.e. types that implement [`IntoDart`].
12    #[cfg(feature = "thread-pool")]
13    fn execute_normal<Rust2DartCodec, TaskFn>(&self, task_info: TaskInfo, task: TaskFn)
14    where
15        TaskFn: FnOnce(TaskContext) -> Result<Rust2DartCodec::Message, Rust2DartCodec::Message>
16            + Send
17            + 'static,
18        Rust2DartCodec: BaseCodec;
19
20    /// Executes a synchronous Rust function
21    fn execute_sync<Rust2DartCodec, SyncTaskFn>(
22        &self,
23        task_info: TaskInfo,
24        sync_task: SyncTaskFn,
25    ) -> Rust2DartCodec::Message
26    where
27        SyncTaskFn: FnOnce() -> Result<Rust2DartCodec::Message, Rust2DartCodec::Message>,
28        Rust2DartCodec: BaseCodec;
29
30    #[cfg(feature = "rust-async")]
31    fn execute_async<Rust2DartCodec, TaskFn, TaskRetFut>(&self, task_info: TaskInfo, task: TaskFn)
32    where
33        TaskFn: FnOnce(TaskContext) -> TaskRetFut + Send + 'static,
34        TaskRetFut: Future<Output = Result<Rust2DartCodec::Message, Rust2DartCodec::Message>>
35            + TaskRetFutTrait,
36        Rust2DartCodec: BaseCodec;
37}