This commit is contained in:
Antonio Scandurra 2023-10-22 16:36:29 +02:00
parent 48033463c8
commit 7171818d24

View file

@ -1,8 +1,8 @@
use crate::{ use crate::{
AppContext, Context, Effect, EntityId, EventEmitter, Executor, Handle, Reference, Subscription, AppContext, AsyncAppContext, Context, Effect, EntityId, EventEmitter, Handle, Reference,
WeakHandle, Subscription, Task, WeakHandle,
}; };
use std::marker::PhantomData; use std::{future::Future, marker::PhantomData};
pub struct ModelContext<'a, T> { pub struct ModelContext<'a, T> {
app: Reference<'a, AppContext>, app: Reference<'a, AppContext>,
@ -112,6 +112,18 @@ impl<'a, T: Send + Sync + 'static> ModelContext<'a, T> {
self.app.push_global(global); self.app.push_global(global);
result result
} }
pub fn spawn<Fut, R>(
&self,
f: impl FnOnce(WeakHandle<T>, AsyncAppContext) -> Fut + Send + 'static,
) -> Task<R>
where
Fut: Future<Output = R> + Send + 'static,
R: Send + 'static,
{
let this = self.handle();
self.app.spawn(|cx| f(this, cx))
}
} }
impl<'a, T: EventEmitter + Send + Sync + 'static> ModelContext<'a, T> { impl<'a, T: EventEmitter + Send + Sync + 'static> ModelContext<'a, T> {