use { crate::{ client::{Client, ClientError}, utils::buffd::MsgParser, wire::WlDisplayId, }, std::{ any::Any, cmp::Ordering, rc::Rc, }, }; pub use jay_wire_types::ObjectId; pub const WL_DISPLAY_ID: WlDisplayId = WlDisplayId::from_raw(1); pub trait ObjectBase: Any { fn id(&self) -> ObjectId; fn version(&self) -> Version; fn handle_request( self: Rc, client: &Client, request: u32, parser: MsgParser<'_, '_>, ) -> Result<(), ClientError>; fn interface(&self) -> Interface; } pub trait Object: ObjectBase + 'static { fn break_loops(&self) {} } #[derive(Copy, Clone, Debug)] pub struct Interface(pub &'static str); impl Interface { pub fn name(self) -> &'static str { self.0 } } #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)] pub struct Version(pub u32); impl Version { pub const ALL: Version = Version(0); } impl PartialEq for Version { fn eq(&self, other: &u32) -> bool { self.0 == *other } } impl PartialOrd for Version { fn partial_cmp(&self, other: &u32) -> Option { self.0.partial_cmp(other) } }