1
0
Fork 0
forked from wry/wry
wry/src/object.rs

59 lines
1.2 KiB
Rust

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<Self>,
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<u32> for Version {
fn eq(&self, other: &u32) -> bool {
self.0 == *other
}
}
impl PartialOrd<u32> for Version {
fn partial_cmp(&self, other: &u32) -> Option<Ordering> {
self.0.partial_cmp(other)
}
}