Give up on entities being Send and Sync

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra 2021-08-23 17:04:32 +02:00
parent 3543aceff3
commit 94e9a83326
4 changed files with 11 additions and 7 deletions

View file

@ -29,7 +29,7 @@ use std::{
time::Duration, time::Duration,
}; };
pub trait Entity: 'static + Send + Sync { pub trait Entity: 'static {
type Event; type Event;
fn release(&mut self, _: &mut MutableAppContext) {} fn release(&mut self, _: &mut MutableAppContext) {}
@ -1738,7 +1738,7 @@ impl Debug for Effect {
} }
} }
pub trait AnyModel: Send + Sync { pub trait AnyModel {
fn as_any(&self) -> &dyn Any; fn as_any(&self) -> &dyn Any;
fn as_any_mut(&mut self) -> &mut dyn Any; fn as_any_mut(&mut self) -> &mut dyn Any;
fn release(&mut self, cx: &mut MutableAppContext); fn release(&mut self, cx: &mut MutableAppContext);
@ -1761,7 +1761,7 @@ where
} }
} }
pub trait AnyView: Send + Sync { pub trait AnyView {
fn as_any(&self) -> &dyn Any; fn as_any(&self) -> &dyn Any;
fn as_any_mut(&mut self) -> &mut dyn Any; fn as_any_mut(&mut self) -> &mut dyn Any;
fn release(&mut self, cx: &mut MutableAppContext); fn release(&mut self, cx: &mut MutableAppContext);
@ -2515,6 +2515,9 @@ pub struct WeakModelHandle<T> {
model_type: PhantomData<T>, model_type: PhantomData<T>,
} }
unsafe impl<T> Send for WeakModelHandle<T> {}
unsafe impl<T> Sync for WeakModelHandle<T> {}
impl<T: Entity> WeakModelHandle<T> { impl<T: Entity> WeakModelHandle<T> {
fn new(model_id: usize) -> Self { fn new(model_id: usize) -> Self {
Self { Self {

View file

@ -1,9 +1,10 @@
use super::channel::{Channel, ChannelList}; use super::channel::{Channel, ChannelList};
use gpui::{Entity, ModelHandle, View}; use gpui::{elements::*, Entity, ModelHandle, View};
pub struct ChatPanel { pub struct ChatPanel {
channel_list: ModelHandle<ChannelList>, channel_list: ModelHandle<ChannelList>,
active_channel: Option<ModelHandle<Channel>>, active_channel: Option<ModelHandle<Channel>>,
messages: ListState,
} }
pub enum Event {} pub enum Event {}

View file

@ -169,7 +169,7 @@ pub fn build_app_state(cx: &AppContext) -> Arc<AppState> {
pub struct Observer<T>(PhantomData<T>); pub struct Observer<T>(PhantomData<T>);
impl<T: 'static + Send + Sync> Entity for Observer<T> { impl<T: 'static> Entity for Observer<T> {
type Event = (); type Event = ();
} }

View file

@ -192,7 +192,7 @@ pub trait ItemHandle: Send + Sync {
fn downgrade(&self) -> Box<dyn WeakItemHandle>; fn downgrade(&self) -> Box<dyn WeakItemHandle>;
} }
pub trait WeakItemHandle: Send + Sync { pub trait WeakItemHandle {
fn file<'a>(&'a self, cx: &'a AppContext) -> Option<&'a File>; fn file<'a>(&'a self, cx: &'a AppContext) -> Option<&'a File>;
fn add_view( fn add_view(
&self, &self,
@ -203,7 +203,7 @@ pub trait WeakItemHandle: Send + Sync {
fn alive(&self, cx: &AppContext) -> bool; fn alive(&self, cx: &AppContext) -> bool;
} }
pub trait ItemViewHandle: Send + Sync { pub trait ItemViewHandle {
fn title(&self, cx: &AppContext) -> String; fn title(&self, cx: &AppContext) -> String;
fn entry_id(&self, cx: &AppContext) -> Option<(usize, Arc<Path>)>; fn entry_id(&self, cx: &AppContext) -> Option<(usize, Arc<Path>)>;
fn boxed_clone(&self) -> Box<dyn ItemViewHandle>; fn boxed_clone(&self) -> Box<dyn ItemViewHandle>;