#[doc(hidden)]
#[macro_export]
macro_rules! spawn_link_config {
() => {
lunatic::Process::spawn
};
(@link) => {
lunatic::Process::spawn_link
};
($config:ident) => {
lunatic::Process::spawn_config
};
(@link $config:ident) => {
lunatic::Process::spawn_link_config
};
}
#[macro_export]
macro_rules! spawn {
($(&$config:ident,)? || $body:expr) => {
lunatic::spawn_link_config!($($config)?) ($(&$config,)? (), |_, _: lunatic::Mailbox<()>| $body)
};
($(&$config:ident,)? |$($argument:ident $(= $value:tt)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!($($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), _: lunatic::Mailbox<()>| $body
)
}
};
($(&$config:ident,)? |$($argument:ident $(= $value:block)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!($($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), _: lunatic::Mailbox<()>| $body
)
}
};
($(&$config:ident,)? |$mailbox:ident : Mailbox<$mailbox_ty:ty $( , $mailbox_s:ty )?>| $body:expr) => {
lunatic::spawn_link_config!($($config)?) (
$(&$config,)?
(),
|_, $mailbox: lunatic::Mailbox<$mailbox_ty $( , $mailbox_s )?>| $body
)
};
($(&$config:ident,)? |$argument:ident, $mailbox:ident : Mailbox<$mailbox_ty:ty $( , $mailbox_s:ty )?>| $body:expr) => {
lunatic::spawn_link_config!($($config)?) (
$(&$config,)?
$argument,
|mut $argument, $mailbox: lunatic::Mailbox<$mailbox_ty $( , $mailbox_s )?>| $body,
)
};
}
#[macro_export]
macro_rules! spawn_link {
($(&$config:ident,)? || $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
(),
|_, _: lunatic::Mailbox<()>| $body
)
};
($(&$config:ident,)? |$($argument:ident $(= $value:tt)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), _: lunatic::Mailbox<()>| $body
)
}
};
($(&$config:ident,)? |$($argument:ident $(= $value:block)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), _: lunatic::Mailbox<()>| $body
)
}
};
($(&$config:ident,)? |$mailbox:ident : Mailbox<$mailbox_ty:ty $( , $mailbox_s:ty )?>| $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
(),
|_, $mailbox: lunatic::Mailbox<$mailbox_ty $( , $mailbox_s )?>| $body
)
};
($(&$config:ident,)? |$argument:ident, $mailbox:ident : Mailbox<$mailbox_ty:ty $( , $mailbox_s:ty )?>| $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
$argument,
|mut $argument, $mailbox: lunatic::Mailbox<$mailbox_ty $( , $mailbox_s )?>| $body,
)
};
(@task $(&$config:ident,)? || $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
(),
|_, protocol: lunatic::protocol::Protocol<lunatic::protocol::Send<_,lunatic::protocol::TaskEnd>>| {
let _ = protocol.send((move || $body)());
},
)
};
(@task $(&$config:ident,)? |$($argument:ident $(= $value:block)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), protocol: lunatic::protocol::Protocol<
lunatic::protocol::Send<_,lunatic::protocol::TaskEnd>>| {
let _ = protocol.send((move || $body)());
},
)
}
};
(@task $(&$config:ident,)? |$($argument:ident $(= $value:tt)? ),*| $body:expr) => {
{
$($(let $argument = $value)?;)*
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
($($argument),*),
|($(mut $argument),*), protocol: lunatic::protocol::Protocol<
lunatic::protocol::Send<_,lunatic::protocol::TaskEnd>>| {
let _ = protocol.send((move || $body)());
},
)
}
};
($(&$config:ident,)? |$protocol:ident : Protocol<$proto_ty:ty>| $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
(),
|_, $protocol: lunatic::protocol::Protocol<$proto_ty>| $body,
)
};
($(&$config:ident,)? |$argument:ident, $protocol:ident : Protocol<$proto_ty:ty>| $body:expr) => {
lunatic::spawn_link_config!(@link $($config)?) (
$(&$config,)?
$argument,
|mut $argument, $protocol: lunatic::protocol::Protocol<$proto_ty>| $body,
)
};
}