mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
78 lines
2.0 KiB
Rust
78 lines
2.0 KiB
Rust
use std::future::Future;
|
|
|
|
use crate::error::Error;
|
|
|
|
use crate::io::shared_thread_state::SharedThreadState;
|
|
|
|
pub struct Scheduler {
|
|
schedule_method: ScheduleMethod,
|
|
}
|
|
|
|
impl Scheduler {
|
|
pub fn new(schedule_method: ScheduleMethod) -> Self {
|
|
Self { schedule_method }
|
|
}
|
|
|
|
pub fn schedule_method(&self) -> &ScheduleMethod {
|
|
&self.schedule_method
|
|
}
|
|
}
|
|
|
|
pub enum ScheduleMethod {
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
Tokio(crate::platform::schedule_method::TokioScheduleMethod),
|
|
#[cfg(target_arch = "wasm32")]
|
|
WebWorkerPool(crate::platform::schedule_method::WebWorkerPoolScheduleMethod),
|
|
}
|
|
|
|
impl Default for ScheduleMethod {
|
|
fn default() -> Self {
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
{
|
|
ScheduleMethod::Tokio(crate::platform::schedule_method::TokioScheduleMethod::new())
|
|
}
|
|
#[cfg(target_arch = "wasm32")]
|
|
{
|
|
panic!("No default ScheduleMethod on web")
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ScheduleMethod {
|
|
#[cfg(target_arch = "wasm32")]
|
|
pub fn schedule<T>(
|
|
&self,
|
|
shared_thread_state: SharedThreadState,
|
|
future_factory: impl (FnOnce(SharedThreadState) -> T) + Send + 'static,
|
|
) -> Result<(), Error>
|
|
where
|
|
T: Future<Output = ()> + 'static,
|
|
{
|
|
match self {
|
|
ScheduleMethod::WebWorkerPool(method) => {
|
|
Ok(method.schedule(shared_thread_state, future_factory))
|
|
}
|
|
_ => Err(Error::Schedule),
|
|
}
|
|
}
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
pub fn schedule<T>(
|
|
&self,
|
|
shared_thread_state: SharedThreadState,
|
|
future_factory: impl (FnOnce(SharedThreadState) -> T) + Send + 'static,
|
|
) -> Result<(), Error>
|
|
where
|
|
T: Future + Send + 'static,
|
|
T::Output: Send + 'static,
|
|
{
|
|
match self {
|
|
ScheduleMethod::Tokio(method) => {
|
|
method.schedule(shared_thread_state, future_factory);
|
|
Ok(())
|
|
}
|
|
_ => Err(Error::Schedule),
|
|
}
|
|
}
|
|
}
|