macro_rules! build_rpc_trait {
(
$(#[$t_attr: meta])*
pub trait $name: ident {
$(
$( #[doc=$m_doc:expr] )*
#[ rpc( $($t:tt)* ) ]
fn $m_name: ident ( $($p: tt)* ) -> $result: tt <$out: ty $(, $error: ty)* >;
)*
}
) => { ... };
(
$(#[$t_attr: meta])*
pub trait $name: ident {
type Metadata;
$(
$( #[ doc=$m_doc:expr ] )*
#[ rpc( $($t:tt)* ) ]
fn $m_name: ident ( $($p: tt)* ) -> $result: tt <$out: ty $(, $error_std: ty) *>;
)*
$(
#[ pubsub( $($pubsub_t:tt)+ ) ] {
$( #[ doc= $sub_doc:expr ] )*
#[ rpc( $($sub_t:tt)* ) ]
fn $sub_name: ident ( $($sub_p: tt)* );
$( #[ doc= $unsub_doc:expr ] )*
#[ rpc( $($unsub_t:tt)* ) ]
fn $unsub_name: ident ( $($unsub_p: tt)* ) -> $sub_result: tt <$sub_out: ty $(, $error_unsub: ty)* >;
}
)*
}
) => { ... };
( WRAP $del: expr =>
(name = $name: expr $(, alias = [ $( $alias: expr, )+ ])*)
fn $method: ident (&self $(, $param: ty)*) -> $result: tt <$out: ty $(, $error: ty)* >
) => { ... };
( WRAP $del: expr =>
(meta, name = $name: expr $(, alias = [ $( $alias: expr, )+ ])*)
fn $method: ident (&self, Self::Metadata $(, $param: ty)*) -> $result: tt <$out: ty $(, $error: ty)* >
) => { ... };
( WRAP $del: expr =>
pubsub: (name = $name: expr)
subscribe: (name = $subscribe: expr $(, alias = [ $( $sub_alias: expr, )+ ])*)
fn $sub_method: ident (&self, Self::Metadata $(, $sub_p: ty)+);
unsubscribe: (name = $unsubscribe: expr $(, alias = [ $( $unsub_alias: expr, )+ ])*)
fn $unsub_method: ident (&self $(, $unsub_p: ty)+) -> $result: tt <$out: ty $(, $error_unsub: ty)* >;
) => { ... };
}