Documentation

macro_rules! trace_level {
	($level:ident by $self:ident, $($args:tt)*) => ({
		tracing::$level!(parent: &$self.span, $($args)*);
	});
	($level:ident @$self:expr, $($args:tt)*) => ({
		tracing::$level!(parent: &$self.span, $($args)*);
	});
	($level:ident in $span:expr, $($args:tt)*) => ({
		let sp: &tracing::Span = &$span;
		tracing::$level!(parent: sp, $($args)*);
	});
	($level:ident :$span:expr, $($args:tt)*) => ({
		trace_level!($level in $span, $($args)*)
	});
	($level:ident $($args:tt)*) => ({
		tracing::$level!($($args)*);
	})
}

macro_rules! trace {
	($($args:tt)*) => {trace_level!(trace $($args)*)}
}
macro_rules! debug {
	($($args:tt)*) => {trace_level!(debug $($args)*)}
}
macro_rules! info {
	($($args:tt)*) => {trace_level!(info $($args)*)}
}
macro_rules! warn {
	($($args:tt)*) => {trace_level!(warn $($args)*)}
}
macro_rules! error {
	($($args:tt)*) => {trace_level!(error $($args)*)}
}

/*
#[macro_export]
macro_rules! listen_loop {
	($name:literal) => {
		pub async fn listen_loop(&self, should_stop: crate::util::StopWaiter) {
			info!("{} server listening…", $name);
			tokio::select! {
				_ = self.inner_loop() => {
					//unreachable!("Inner loop should never return!");
					error!("Inner listen loop unexpectedly returned!");
				},
				_ = should_stop => {
					info!("{} server shutdown!", $name);
				}
			}
			info!("{} server stopped!", $name);
		}
	}
}
*/