use serde::{Deserialize, Serialize, de::DeserializeOwned};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SurfaceRequest {
pub id: u64,
pub kind: SurfaceRequestKind,
}
#[derive(Debug, Clone, derive_more::From, Serialize, Deserialize)]
pub enum SurfaceRequestKind {
SetPosition(SetPosition),
UpdateSharedHandle(UpdateSharedHandle),
}
pub trait SurfaceRequestable: Into<SurfaceRequestKind> + Serialize + DeserializeOwned {
type Response: Serialize + DeserializeOwned;
}
macro_rules! impl_SurfaceRequestable {
($ty:ty, $res_ty:ty) => {
impl SurfaceRequestable for $ty {
type Response = $res_ty;
}
};
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetPosition {
pub x: i32,
pub y: i32,
}
impl_SurfaceRequestable!(SetPosition, ());
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum UpdateSharedHandle {
Kmt(u32),
Nt(u32),
None,
}
impl_SurfaceRequestable!(UpdateSharedHandle, ());