mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 15:24:48 +01:00
feat: rather than +Debug, make a newtype
This commit is contained in:
parent
7900ca08a7
commit
d3ce714070
3 changed files with 21 additions and 7 deletions
|
@ -70,9 +70,23 @@ pub trait Controller<T : Sized + Send + Sync> : Sized + Send + Sync {
|
|||
}
|
||||
|
||||
|
||||
/// type alias for Boxed dyn callback
|
||||
pub type ControllerCallback = Box<dyn ControllerCallbackTrait>;
|
||||
/// type wrapper for Boxed dyn callback
|
||||
pub struct ControllerCallback(Box<dyn Sync + Send + Fn()>);
|
||||
|
||||
/// underlying trait for controller callback: must be a threadsafe repeatable non-mut closure which
|
||||
/// can be debug printed
|
||||
pub trait ControllerCallbackTrait : Sync + Send + std::fmt::Debug + Fn() {}
|
||||
impl ControllerCallback {
|
||||
pub fn call(&self) {
|
||||
self.0() // lmao at this syntax
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for ControllerCallback {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "ControllerCallback {{ {:p} }}", self.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Sync + Send + Fn() + 'static> From<T> for ControllerCallback {
|
||||
fn from(value: T) -> Self {
|
||||
Self(Box::new(value))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ impl ControllerWorker<TextChange> for BufferWorker {
|
|||
tx.send(()).unwrap_or_warn("could not wake up poller");
|
||||
}
|
||||
if let Some(cb) = self.callback.borrow().as_ref() {
|
||||
cb(); // TODO should we run this on another task/thread?
|
||||
cb.call(); // TODO should we run this on another task/thread?
|
||||
}
|
||||
},
|
||||
Err(e) => tracing::error!("could not deserialize operation from server: {}", e),
|
||||
|
|
|
@ -62,7 +62,7 @@ impl ControllerWorker<Cursor> for CursorWorker {
|
|||
self.channel.send(cur.clone()).unwrap_or_warn("could not broadcast event");
|
||||
self.changed.send(cur).unwrap_or_warn("could not update last event");
|
||||
if let Some(cb) = self.callback.borrow().as_ref() {
|
||||
cb(); // TODO should this run in its own task/thread?
|
||||
cb.call(); // TODO should this run in its own task/thread?
|
||||
}
|
||||
},
|
||||
else => break,
|
||||
|
|
Loading…
Reference in a new issue