#[macro_use]
mod request;
#[cfg(not(feature = "service-attr"))]
#[macro_export]
macro_rules! service {
(
$(#[$meta:meta])*
trait $servicenm:ident {
$($guts:tt)*
}
) => (
service! {
$(#[$meta])*
trait $servicenm {
$($guts)*
}
impl[T: $crate::AbsAdapter] for T {
|this| this
}
}
);
(
$(#[$meta:meta])*
pub trait $servicenm:ident {
$($guts:tt)*
}
) => (
service! {
$(#[$meta])*
pub trait $servicenm {
$($guts)*
}
impl[T: $crate::AbsAdapter] for T {
|this| this
}
}
);
(
$(#[$meta:meta])*
trait $servicenm:ident {
$($guts:tt)*
}
$($delegates:tt)+
) => (
$(#[$meta])*
trait $servicenm {
method_proto!($($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($delegates)+);
);
(
$(#[$meta:meta])*
pub trait $servicenm:ident {
$($guts:tt)*
}
$($delegates:tt)+
) => (
$(#[$meta])*
pub trait $servicenm {
method_proto!($($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($delegates)+);
);
}
#[macro_export]
macro_rules! unsizeable(
($($servicenm:ty),+) => (
$(impl ::anterofit::UnsizeService for $servicenm {
fn from_adapter<A>(adpt: ::std::sync::Arc<A>) -> ::std::sync::Arc<Self>
where A: ::anterofit::AbsAdapter {
adpt
}
})*
)
);
#[doc(hidden)]
#[macro_export]
macro_rules! method_proto(
(
$(#[$fnmeta:meta])*
fn $fnname:ident (&self $($args:tt)*) $(-> $ret:ty)* {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname (&self $($args)*) -> $crate::net::Request<$($ret)*>;
method_proto!($($rem)*);
);
(
$(#[$fnmeta:meta])*
fn $fnname:ident [$($generics:tt)+] (&self $($args:tt)*) $(-> $ret:ty)* {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname <$($generics)+> (&self $($args)*) -> $crate::net::Request<$($ret)*>;
method_proto!($($rem)*);
);
(
$(#[$fnmeta:meta])*
fn $fnname:ident (&self $($args:tt)*) $(-> $ret:ty)* [where $($wheres:tt)+] {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname (&self $($args)*) -> $crate::net::Request<$($ret)*> where $($wheres)+ ;
method_proto!($($rem)*);
);
(
$(#[$fnmeta:meta])*
fn $fnname:ident [$($generics:tt)+] (&self $($args:tt)*) $(-> $ret:ty)* [where $($wheres:tt)+] {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname <$($generics)+> (&self $($args)*) -> $crate::net::Request<$($ret)*> where $($wheres)+;
method_proto!($($rem)*);
);
() => ();
);
#[doc(hidden)]
#[macro_export]
macro_rules! method_impl(
(
$getadapt:expr;
$(#[$fnmeta:meta])*
fn $fnname:ident (&self $($args:tt)*) $(-> $ret:ty)* {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname (&self $($args)*) -> $crate::net::Request<$($ret)*> {
request_impl! {
$crate::get_adapter(self, $getadapt); $($body)+
}
}
method_impl!($getadapt; $($rem)*);
);
(
$getadapt:expr;
$(#[$fnmeta:meta])*
fn $fnname:ident [$($generics:tt)+] (&self $($args:tt)*) $(-> $ret:ty)* {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname <$($generics)+> (&self $($args)*) -> $crate::net::Request<$($ret)*> {
request_impl! {
$crate::get_adapter(self, $getadapt); $($body)+
}
}
method_impl!($getadapt; $($rem)*);
);
(
$getadapt:expr;
$(#[$fnmeta:meta])*
fn $fnname:ident (&self $($args:tt)*) $(-> $ret:ty)* [where $($wheres:tt)+] {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname (&self $($args)*) -> $crate::net::Request<$($ret)*> where $($wheres)+ {
request_impl! {
$crate::get_adapter(self, $getadapt); $($body)+
}
}
method_impl!($getadapt; $($rem)*);
);
(
$getadapt:expr;
$(#[$fnmeta:meta])*
fn $fnname:ident [$($generics:tt)+] (&self $($args:tt)*) $(-> $ret:ty)* [where $($wheres:tt)+] {
$($body:tt)+
}
$($rem:tt)*
) => (
$(#[$fnmeta])*
fn $fnname <$($generics)+> (&self $($args)*) -> $crate::net::Request<$($ret)*> where $($wheres)+ {
request_impl! {
$crate::get_adapter(self, $getadapt); $($body)+
}
}
method_impl!($getadapt; $($rem)*);
);
($_getadapt:expr; ) => ();
);
#[doc(hidden)]
#[macro_export]
macro_rules! delegate_impl {
(
$servicenm:ident; [$($guts:tt)*]
impl for $delegate:ty {
$getadapt:expr
}
$($rem:tt)*
) => (
impl $servicenm for $delegate {
method_impl!($getadapt; $($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($rem)*);
);
(
$servicenm:ident; [$($guts:tt)*]
impl [$($decls:tt)*] for $delegate:ty {
$getadapt:expr
}
$($rem:tt)*
) => (
impl<$($decls)*> $servicenm for $delegate {
method_impl!($getadapt; $($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($rem)*);
);
(
$servicenm:ident; [$($guts:tt)*]
impl for $delegate:ty [where $($wheres:tt)+]{
$getadapt:expr
}
$($rem:tt)*
) => (
impl $servicenm for $delegate where $($wheres)+ {
method_impl!($getadapt; $($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($rem)*);
);
(
$servicenm:ident; [$($guts:tt)*]
impl [$($decls:tt)*] for $delegate:ty [where $($wheres:tt)+]{
$getadapt:expr
}
$($rem:tt)*
) => (
impl<$($decls)*> $servicenm for $delegate where $($wheres)+ {
method_impl!($getadapt; $($guts)*);
}
delegate_impl!($servicenm; [$($guts)*] $($rem)*);
);
($servicenm:ident; [$($guts:tt)*]) => ();
}
#[macro_export]
macro_rules! meta_service (
(trait $metanm:ident : $($superr:tt)+ ) => (
trait $metanm : $($superr)+ {}
impl<T: $($superr)+> $metanm for T {}
);
(pub trait $metanm:ident : $($superr:tt)+ ) => (
pub trait $metanm : $($superr)+ {}
impl<T: $($superr)+> $metanm for T {}
);
);
#[cfg(feature = "service-attr")]
#[doc(hidden)]
#[macro_export]
macro_rules! delegate (
($($a:tt)*) => ()
);