From 903bedad061099c4e7b9b68011bd75d4bb890253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Fri, 5 Mar 2021 00:49:12 +0400 Subject: [PATCH] Make EventSender more generic, see if it helps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau --- qemu-display-listener/src/console.rs | 2 +- qemu-display-listener/src/console_listener.rs | 29 +++++-------------- qemu-display-listener/src/event_sender.rs | 24 +++++++++++++++ qemu-display-listener/src/lib.rs | 3 ++ 4 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 qemu-display-listener/src/event_sender.rs diff --git a/qemu-display-listener/src/console.rs b/qemu-display-listener/src/console.rs index 7d9ff60..48a566c 100644 --- a/qemu-display-listener/src/console.rs +++ b/qemu-display-listener/src/console.rs @@ -5,7 +5,7 @@ use std::{os::unix::io::AsRawFd, thread}; use zbus::{dbus_proxy, export::zvariant::Fd}; use crate::Result; -use crate::{ConsoleEvent, KeyboardProxy, ConsoleListener, MouseProxy}; +use crate::{ConsoleEvent, ConsoleListener, KeyboardProxy, MouseProxy}; #[dbus_proxy(default_service = "org.qemu", interface = "org.qemu.Display1.Console")] pub trait Console { diff --git a/qemu-display-listener/src/console_listener.rs b/qemu-display-listener/src/console_listener.rs index 2b4b011..c75f60e 100644 --- a/qemu-display-listener/src/console_listener.rs +++ b/qemu-display-listener/src/console_listener.rs @@ -1,12 +1,14 @@ use std::cell::RefCell; use std::ops::Drop; use std::os::unix::io::{AsRawFd, RawFd}; -use std::sync::mpsc::{Receiver, RecvError, SendError, Sender}; +use std::sync::mpsc::{Receiver, RecvError, SendError}; use std::sync::Arc; use derivative::Derivative; use zbus::{dbus_interface, export::zvariant::Fd}; +use crate::EventSender; + #[derive(Derivative)] #[derivative(Debug)] pub struct Scanout { @@ -79,32 +81,15 @@ pub enum ConsoleEvent { Disconnected, } -pub(crate) trait EventSender { - fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError>; -} - -impl EventSender for Sender { - fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError> { - self.send(t) - } -} - -#[cfg(feature = "glib")] -impl EventSender for glib::Sender { - fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError> { - self.send(t) - } -} - #[derive(Debug)] -pub(crate) struct ConsoleListener { +pub(crate) struct ConsoleListener> { tx: E, wait_rx: Receiver<()>, err: Arc>>>, } #[dbus_interface(name = "org.qemu.Display1.Listener")] -impl ConsoleListener { +impl> ConsoleListener { fn scanout( &mut self, width: u32, @@ -189,7 +174,7 @@ impl ConsoleListener { } } -impl ConsoleListener { +impl> ConsoleListener { pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self { let err = Arc::new(RefCell::new(None)); ConsoleListener { tx, wait_rx, err } @@ -210,7 +195,7 @@ impl ConsoleListener { } } -impl Drop for ConsoleListener { +impl> Drop for ConsoleListener { fn drop(&mut self) { self.send(ConsoleEvent::Disconnected) } diff --git a/qemu-display-listener/src/event_sender.rs b/qemu-display-listener/src/event_sender.rs new file mode 100644 index 0000000..31df7c1 --- /dev/null +++ b/qemu-display-listener/src/event_sender.rs @@ -0,0 +1,24 @@ +use std::sync::mpsc::{Sender, SendError}; + +pub(crate) trait EventSender { + type Event; + + fn send_event(&self, t: Self::Event) -> Result<(), SendError>; +} + +impl EventSender for Sender { + type Event = T; + + fn send_event(&self, t: Self::Event) -> Result<(), SendError> { + self.send(t) + } +} + +#[cfg(feature = "glib")] +impl EventSender for glib::Sender { + type Event = T; + + fn send_event(&self, t: Self::Event) -> Result<(), SendError> { + self.send(t) + } +} diff --git a/qemu-display-listener/src/lib.rs b/qemu-display-listener/src/lib.rs index cc1ab31..bc315c2 100644 --- a/qemu-display-listener/src/lib.rs +++ b/qemu-display-listener/src/lib.rs @@ -3,6 +3,9 @@ mod error; pub use error::*; +mod event_sender; +use event_sender::*; + mod vm; pub use vm::*;