wire: generate trait for request handling
This commit is contained in:
parent
e3a1a0b30f
commit
acb391335b
102 changed files with 1632 additions and 2086 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue