// Contents of this file should be the same as on wlx-overlay-s. use std::collections::HashMap; use serde::{Deserialize, Serialize}; use super::ipc::Serial; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ServerInfo {} #[derive(Debug, Clone, Serialize, Deserialize)] pub struct HandshakeSuccess { pub runtime: String, // Runtime name, for example "wlx-overlay-s" } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Disconnect { pub reason: String, } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] pub struct WvrProcessHandle { pub idx: u32, pub generation: u64, } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] pub struct WvrWindowHandle { pub idx: u32, pub generation: u64, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WvrWindow { pub size_x: u32, pub size_y: u32, pub visible: bool, pub handle: WvrWindowHandle, pub process_handle: WvrProcessHandle, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WvrWindowList { pub list: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WvrProcess { pub name: String, pub handle: WvrProcessHandle, pub userdata: HashMap, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WvrProcessList { pub list: Vec, } #[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)] pub struct Margins { pub left: u16, pub right: u16, pub top: u16, pub bottom: u16, } #[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)] pub struct StackingOptions { pub margins_first: Margins, pub margins_rest: Margins, } #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] pub enum WvrStateChanged { ProcessCreated, ProcessRemoved, WindowCreated, WindowRemoved, DashboardShown, DashboardHidden, } #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] pub struct WlxInputStatePointer { pub pos: [f32; 3], } #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] pub struct WlxInputState { pub hmd_pos: [f32; 3], pub left: WlxInputStatePointer, pub right: WlxInputStatePointer, } // "Wvr" prefixes are WayVR-specific #[derive(Debug, Clone, Serialize, Deserialize)] pub enum PacketServer { Disconnect(Disconnect), HandshakeSuccess(HandshakeSuccess), WlxInputStateResponse(Serial, WlxInputState), WvrWindowListResponse(Serial, Option), WvrProcessGetResponse(Serial, Option), WvrProcessLaunchResponse(Serial, Result), WvrProcessListResponse(Serial, WvrProcessList), WvrStateChanged(WvrStateChanged), } impl PacketServer { pub fn serial(&self) -> Option<&Serial> { match self { PacketServer::Disconnect(_) => None, PacketServer::HandshakeSuccess(_) => None, PacketServer::WlxInputStateResponse(serial, _) => Some(serial), PacketServer::WvrWindowListResponse(serial, _) => Some(serial), PacketServer::WvrProcessGetResponse(serial, _) => Some(serial), PacketServer::WvrProcessLaunchResponse(serial, _) => Some(serial), PacketServer::WvrProcessListResponse(serial, _) => Some(serial), PacketServer::WvrStateChanged(_) => None, } } }