ei: add support for libei
This commit is contained in:
parent
084fe50259
commit
40e87f8f91
69 changed files with 4340 additions and 72 deletions
94
src/ei/ei_object.rs
Normal file
94
src/ei/ei_object.rs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
use {
|
||||
crate::{
|
||||
ei::{
|
||||
ei_client::{EiClient, EiClientError},
|
||||
EiContext,
|
||||
},
|
||||
utils::buffd::EiMsgParser,
|
||||
wire_ei::EiHandshakeId,
|
||||
},
|
||||
std::{
|
||||
cmp::Ordering,
|
||||
fmt::{Display, Formatter, LowerHex},
|
||||
rc::Rc,
|
||||
},
|
||||
};
|
||||
|
||||
pub const EI_HANDSHAKE_ID: EiHandshakeId = EiHandshakeId::from_raw(0);
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
|
||||
pub struct EiObjectId(u64);
|
||||
|
||||
impl EiObjectId {
|
||||
#[allow(dead_code)]
|
||||
pub const NONE: Self = EiObjectId(0);
|
||||
|
||||
pub fn from_raw(raw: u64) -> Self {
|
||||
Self(raw)
|
||||
}
|
||||
|
||||
pub fn raw(self) -> u64 {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for EiObjectId {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl LowerHex for EiObjectId {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
LowerHex::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait EiObjectBase {
|
||||
fn id(&self) -> EiObjectId;
|
||||
fn version(&self) -> EiVersion;
|
||||
fn client(&self) -> &EiClient;
|
||||
fn handle_request(
|
||||
self: Rc<Self>,
|
||||
client: &EiClient,
|
||||
request: u32,
|
||||
parser: EiMsgParser<'_, '_>,
|
||||
) -> Result<(), EiClientError>;
|
||||
fn interface(&self) -> EiInterface;
|
||||
}
|
||||
|
||||
pub trait EiObject: EiObjectBase + 'static {
|
||||
fn break_loops(&self) {}
|
||||
|
||||
fn context(&self) -> EiContext {
|
||||
self.client().context.get()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
pub struct EiInterface(pub &'static str);
|
||||
|
||||
impl EiInterface {
|
||||
pub fn name(self) -> &'static str {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
|
||||
pub struct EiVersion(pub u32);
|
||||
|
||||
impl EiVersion {
|
||||
// pub const ALL: EiVersion = EiVersion(0);
|
||||
}
|
||||
|
||||
impl PartialEq<u32> for EiVersion {
|
||||
fn eq(&self, other: &u32) -> bool {
|
||||
self.0 == *other
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd<u32> for EiVersion {
|
||||
fn partial_cmp(&self, other: &u32) -> Option<Ordering> {
|
||||
self.0.partial_cmp(other)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue