#[macro_export]
macro_rules! conn_try {
($expr:expr, $conn:expr $(,)?) => {
match $expr {
Ok(value) => value,
Err(error) => {
$crate::log::error!("{}:{} conn_try error: {}", file!(), line!(), error);
return $conn.with_status(500).halt();
}
}
};
}
#[macro_export]
macro_rules! conn_unwrap {
($option:expr, $conn:expr $(,)?) => {
match $option {
Some(value) => value,
None => return $conn,
}
};
}
#[macro_export]
macro_rules! log_error {
($expr:expr_2021) => {
if let Err(err) = $expr {
$crate::log::error!("{}:{} {:?}", file!(), line!(), err);
}
};
($expr:expr_2021, $message:expr_2021) => {
if let Err(err) = $expr {
$crate::log::error!("{}:{} {} {:?}", file!(), line!(), $message, err);
}
};
}
#[macro_export]
macro_rules! delegate_handler {
($struct_name:ty) => {
impl $crate::Handler for $struct_name {
async fn run(&self, conn: $crate::Conn) -> $crate::Conn {
use $crate::Handler;
self.0.run(conn).await
}
async fn init(&mut self, info: &mut $crate::Info) {
use $crate::Handler;
self.0.init(info).await;
}
async fn before_send(&self, conn: $crate::Conn) -> $crate::Conn {
use $crate::Handler;
self.0.before_send(conn).await
}
fn name(&self) -> std::borrow::Cow<'static, str> {
use $crate::Handler;
self.0.name()
}
fn has_upgrade(&self, upgrade: &$crate::Upgrade) -> bool {
use $crate::Handler;
self.0.has_upgrade(upgrade)
}
async fn upgrade(&self, upgrade: $crate::Upgrade) {
use $crate::Handler;
self.0.upgrade(upgrade).await;
}
}
};
($struct_name:ty => $target:ident) => {
impl $crate::Handler for $struct_name {
async fn run(&self, conn: $crate::Conn) -> $crate::Conn {
use $crate::Handler;
self.$target.run(conn).await
}
async fn init(&mut self, info: &mut $crate::Info) {
use $crate::Handler;
self.$target.init(info).await;
}
async fn before_send(&self, conn: $crate::Conn) -> $crate::Conn {
use $crate::Handler;
self.$target.before_send(conn).await
}
fn name(&self) -> std::borrow::Cow<'static, str> {
use $crate::Handler;
self.$target.name()
}
fn has_upgrade(&self, upgrade: &$crate::Upgrade) -> bool {
use $crate::Handler;
self.$target.has_upgrade(upgrade)
}
async fn upgrade(&self, upgrade: $crate::Upgrade) {
use $crate::Handler;
self.$target.upgrade(upgrade).await;
}
}
};
}