59 lines
1.2 KiB
Rust
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)
|
|
}
|
|
}
|