#[macro_export]
macro_rules! literal {
($text:expr $(,)?) => {{
const __TEXT: &$crate::_private::str = $text;
{
#[allow(clippy::declare_interior_mutable_const)]
const SI: &$crate::_private::StaticArcStrInner<[$crate::_private::u8; __TEXT.len()]> = unsafe {
&$crate::_private::StaticArcStrInner {
len_flag: match $crate::_private::StaticArcStrInner::<[$crate::_private::u8; __TEXT.len()]>::encode_len(__TEXT.len()) {
Some(len) => len,
None => $crate::core::panic!("impossibly long length")
},
count_flag: $crate::_private::StaticArcStrInner::<[$crate::_private::u8; __TEXT.len()]>::STATIC_COUNT_VALUE,
data: *$crate::_private::ConstPtrDeref::<[$crate::_private::u8; __TEXT.len()]> {
p: __TEXT.as_ptr(),
}
.a,
}
};
#[allow(clippy::declare_interior_mutable_const)]
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");
}
}
}
}