use core::fmt::Debug;
use serde::{Deserialize, Serialize, de::DeserializeOwned};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WindowRequest {
pub id: u32,
pub kind: WindowRequestKind,
}
#[derive(Debug, Clone, derive_more::From, Serialize, Deserialize)]
pub enum WindowRequestKind {
ListenInput(ListenInput),
}
pub trait WindowRequestable: Into<WindowRequestKind> + Serialize + DeserializeOwned {
type Response: Serialize + DeserializeOwned;
}
macro_rules! impl_WindowRequestable {
($ty:ty, $res_ty:ty) => {
impl WindowRequestable for $ty {
type Response = $res_ty;
}
};
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct ListenInput {
pub cursor: bool,
pub keyboard: bool,
}
impl_WindowRequestable!(ListenInput, ());