From f0648c2a184732134e38f8ce1eeae5f6b2f5a04d Mon Sep 17 00:00:00 2001 From: Fintan Halpenny Date: Tue, 23 Apr 2024 17:17:20 +0100 Subject: [PATCH] radicle: move Emitter to events module Move the events Emitter to the `radicle::node::events` module to allow it to be used outside of `radicle-node`. Signed-off-by: Fintan Halpenny X-Clacks-Overhead: GNU Terry Pratchett --- radicle-node/src/runtime.rs | 35 +---------------------------------- radicle/src/node/events.rs | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/radicle-node/src/runtime.rs b/radicle-node/src/runtime.rs index 9406f129..9f94a93a 100644 --- a/radicle-node/src/runtime.rs +++ b/radicle-node/src/runtime.rs @@ -3,7 +3,6 @@ pub mod thread; use std::os::unix::net::UnixListener; use std::path::PathBuf; -use std::sync::{Arc, Mutex}; use std::{fs, io, net}; use crossbeam_channel as chan; @@ -35,6 +34,7 @@ use crate::{service, LocalTime}; pub use handle::Error as HandleError; pub use handle::Handle; +pub use node::events::Emitter; /// A client error. #[derive(Error, Debug)] @@ -84,39 +84,6 @@ pub enum Error { GitVersion(#[from] git::VersionError), } -/// Publishes events to subscribers. -#[derive(Debug, Clone)] -pub struct Emitter { - subscribers: Arc>>>, -} - -impl Default for Emitter { - fn default() -> Emitter { - Emitter { - subscribers: Default::default(), - } - } -} - -impl Emitter { - /// Emit event to subscribers and drop those who can't receive it. - pub(crate) fn emit(&self, event: T) { - self.subscribers - .lock() - .unwrap() - .retain(|s| s.try_send(event.clone()).is_ok()); - } - - /// Subscribe to events stream. - pub fn subscribe(&self) -> chan::Receiver { - let (sender, receiver) = chan::unbounded(); - let mut subs = self.subscribers.lock().unwrap(); - subs.push(sender); - - receiver - } -} - /// Holds join handles to the client threads, as well as a client handle. pub struct Runtime { pub id: NodeId, diff --git a/radicle/src/node/events.rs b/radicle/src/node/events.rs index d5c3eab3..34d9f43e 100644 --- a/radicle/src/node/events.rs +++ b/radicle/src/node/events.rs @@ -1,4 +1,6 @@ use std::ops::Deref; +use std::sync::Arc; +use std::sync::Mutex; use std::time; use crossbeam_channel as chan; @@ -119,3 +121,36 @@ impl Events { } } } + +/// Publishes events to subscribers. +#[derive(Debug, Clone)] +pub struct Emitter { + subscribers: Arc>>>, +} + +impl Default for Emitter { + fn default() -> Emitter { + Emitter { + subscribers: Default::default(), + } + } +} + +impl Emitter { + /// Emit event to subscribers and drop those who can't receive it. + pub fn emit(&self, event: T) { + self.subscribers + .lock() + .unwrap() + .retain(|s| s.try_send(event.clone()).is_ok()); + } + + /// Subscribe to events stream. + pub fn subscribe(&self) -> chan::Receiver { + let (sender, receiver) = chan::unbounded(); + let mut subs = self.subscribers.lock().unwrap(); + subs.push(sender); + + receiver + } +}