#[cfg(feature = "macros-base64")]
pub mod base64;
#[cfg(feature = "macros-hash")]
pub mod hash;
#[cfg(feature = "macros-random")]
pub mod random;
#[cfg(feature = "macros-string")]
pub mod string;
#[macro_export]
macro_rules! now {
() => {{
match std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH) {
Ok(t) => t,
Err(_) => panic!("SystemTime before UNIX EPOCH!"),
}
}};
}
#[macro_export]
macro_rules! init_tracing_simple {
() => {{
use tracing::level_filters::LevelFilter;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer};
let fmt_layer = tracing_subscriber::fmt::layer().with_filter(
EnvFilter::builder()
.with_default_directive(LevelFilter::DEBUG.into())
.from_env_lossy()
.add_directive("otel::tracing=trace".parse().unwrap())
.add_directive("h2=error".parse().unwrap())
.add_directive("tower=error".parse().unwrap())
.add_directive("hyper=error".parse().unwrap()),
);
tracing_subscriber::registry().with(fmt_layer).init();
}};
}
#[macro_export]
macro_rules! wrapper {
($vis:vis $name:ident$(<$($lt:lifetime),+>)?($($tt:tt)+) $(, <$($plt_name:ident: $plt:lifetime),+>)? $(, derive($($derive:path),+))?) => {
$(#[derive($($derive),+)])?
#[repr(transparent)]
#[doc = concat!("Wrapper over `", stringify!($($tt)+), "`")]
$vis struct $name<$($($lt),+)?> {
inner: wrapper!(INNER $($tt)+),
$($(
$plt_name: std::marker::PhantomData<&$plt ()>,
),+)?
}
impl<$($($lt),+)?> From<wrapper!(INNER $($tt)+)> for $name<$($($lt),+)?> {
#[inline]
fn from(inner: wrapper!(INNER $($tt)+)) -> Self {
Self {
inner,
$($($plt_name: std::marker::PhantomData),+)?
}
}
}
impl<$($($lt),+)?> std::ops::Deref for $name<$($($lt),+)?> {
type Target = wrapper!(INNER $($tt)+);
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl<$($($lt),+)?> std::ops::DerefMut for $name<$($($lt),+)?> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.inner
}
}
impl<$($($lt),+)?> AsRef<wrapper!(INNER $($tt)+)> for $name<$($($lt),+)?> {
fn as_ref(&self) -> &wrapper!(INNER $($tt)+) {
&self.inner
}
}
impl<$($($lt),+)?> $name<$($($lt),+)?> {
#[inline]
#[doc = concat!("Creates a new instance of [`", stringify!($name), "`]")]
$vis const fn new(inner: wrapper!(INNER $($tt)+)) -> Self {
Self {
inner,
$($($plt_name: std::marker::PhantomData),+)?
}
}
}
};
(INNER $vis:vis $inner:ty) => {
$inner
};
(INNER $vis:vis &$($lt:lifetime)? $inner:ty) => {
&$($lt)? $inner
};
(INNER $vis:vis &mut $($lt:lifetime)? $inner:ty) => {
&mut $($lt)? $inner
};
}