1
0
Fork 0
forked from wry/wry

wire: generate trait for request handling

This commit is contained in:
Julian Orth 2024-04-08 17:37:35 +02:00
parent e3a1a0b30f
commit acb391335b
102 changed files with 1632 additions and 2086 deletions

View file

@ -52,38 +52,27 @@ macro_rules! usr_object_base {
}
macro_rules! object_base {
($self:ident = $oname:ident; $($code:ident => $f:ident $(if $cond:expr)?,)*) => {
($self:ident = $oname:ident; version = $version:expr;) => {
impl crate::object::ObjectBase for $oname {
fn id(&$self) -> crate::object::ObjectId {
$self.id.into()
}
fn version(&$self) -> crate::object::Version {
$version
}
fn into_any($self: std::rc::Rc<Self>) -> std::rc::Rc<dyn std::any::Any> {
$self
}
#[allow(unused_variables, unreachable_code)]
fn handle_request(
$self: std::rc::Rc<Self>,
client: &crate::client::Client,
request: u32,
parser: crate::utils::buffd::MsgParser<'_, '_>,
) -> Result<(), crate::client::ClientError> {
let res: Result<(), crate::client::MethodError> = match request {
$(
$code $(if $cond)? => $oname::$f(&$self, parser).map_err(|e| crate::client::MethodError {
method: stringify!($f),
error: Box::new(e),
}),
)*
_ => return Err(crate::client::ClientError::InvalidMethod),
};
if let Err(e) = res {
return Err(crate::client::ClientError::ObjectError(crate::client::ObjectError {
interface: crate::wire::$oname,
error: Box::new(e),
}));
}
Ok(())
$self.handle_request_impl(client, request, parser)
}
fn interface(&$self) -> crate::object::Interface {