use std::{cell::OnceCell, fmt::Arguments};
#[macro_export]
macro_rules! lazy_str {
($($arg:tt)*) => {
$crate::LazyStr::new(format_args!($($arg)*))
};
}
pub struct LazyStr<'a> {
args: Arguments<'a>,
value: OnceCell<String>,
}
impl<'a> LazyStr<'a> {
pub fn new(args: Arguments<'a>) -> Self {
Self {
args,
value: OnceCell::new(),
}
}
}
impl AsRef<str> for LazyStr<'_> {
fn as_ref(&self) -> &str {
self.value.get_or_init(|| self.args.to_string()).as_str()
}
}