#[macro_export]
macro_rules! literal {
($text:expr $(,)?) => {{
const __TEXT: &$crate::_private::str = $text;
{
const SI: &$crate::_private::StaticArcStrInner<[$crate::_private::u8; __TEXT.len()]> = unsafe {
&$crate::_private::StaticArcStrInner {
len_flags: __TEXT.len() << 1,
count: 0,
data: *$crate::_private::ConstPtrDeref::<[$crate::_private::u8; __TEXT.len()]> {
p: __TEXT.as_ptr(),
}
.a,
}
};
const S: $crate::ArcStr = unsafe { $crate::ArcStr::_private_new_from_static_data(SI) };
S
}
}};
}
#[macro_export]
macro_rules! format {
($($toks:tt)*) => {
$crate::ArcStr::from($crate::alloc::fmt::format($crate::core::format_args!($($toks)*)))
};
}
#[macro_export]
#[cfg(feature = "substr")]
macro_rules! literal_substr {
($text:expr $(,)?) => {{
const __S: &$crate::_private::str = $text;
{
const PARENT: $crate::ArcStr = $crate::literal!(__S);
const SUBSTR: $crate::Substr =
unsafe { $crate::Substr::from_parts_unchecked(PARENT, 0..__S.len()) };
SUBSTR
}
}};
}
#[cfg(test)]
mod test {
#[test]
fn ensure_no_import() {
let v = literal!("foo");
assert_eq!(v, "foo");
#[cfg(feature = "substr")]
{
let substr = literal_substr!("bar");
assert_eq!(substr, "bar");
}
#[cfg(not(loom))]
{
let test = crate::format!("foo");
assert_eq!(test, "foo");
let test2 = crate::format!("foo {}", 123);
assert_eq!(test2, "foo 123");
#[cfg(not(msrv))]
{
let foo = "abc";
let test3 = crate::format!("foo {foo}");
assert_eq!(test3, "foo abc");
}
}
}
}