#[macro_export]
macro_rules! EventBuilder {
($name:expr,$($k:expr=>$v:expr),* $(,)?) => {
format!("{}\n{}\n",$name, $crate::event::Header!($($k => $v),*))
};
($name:expr, $($k:expr=>$v:expr),* $(,)? $( =>$rest:expr)?;$body:expr $(,$content:expr)?) => {
format!(
"{}\n{}{}\n{}",
$name,
$crate::event::Header!(
$($k => $v),*,
"content-length" => $body.len(),
"content-type" => $crate::EventBuilder!(@content $($content)?)
),
$crate::EventBuilder!(@rest $($rest)?),
$body
)
};
(@rest $n:expr) => {
$n
};
(@rest ) => {
""
};
(@content $n:expr) => {
$n
};
(@content) => {
"text/plain"
};
}
#[macro_export]
macro_rules! Header {
($($k:expr=>$v:expr),* $(,)?) => {
format_args!(
concat!(
$($crate::event::Header!(@sub $k)),*,
),
$($k, $v),*
)
};
(@sub $n:expr) => {
"{}: {}\n"
};
}
pub use EventBuilder;
pub use Header;