#[macro_export]
#[doc(hidden)]
macro_rules! __arcstr {
($text:expr $(,)?) => {{
const __ARC_STR_TEXT: &$crate::str::arcstr::_private::str = $text;
{
#[allow(clippy::declare_interior_mutable_const)]
const __ARC_STR_SI: &$crate::str::arcstr::_private::StaticArcStrInner<[$crate::str::arcstr::_private::u8; __ARC_STR_TEXT.len()]> = unsafe {
&$crate::str::arcstr::_private::StaticArcStrInner {
len_flag: match $crate::str::arcstr::_private::StaticArcStrInner::<[$crate::str::arcstr::_private::u8; __ARC_STR_TEXT.len()]>::encode_len(__ARC_STR_TEXT.len()) {
Some(len) => len,
None => panic!("impossibly long length")
},
count_flag: $crate::str::arcstr::_private::STATIC_COUNT_VALUE,
data: *$crate::str::arcstr::_private::ConstPtrDeref::<[$crate::str::arcstr::_private::u8; __ARC_STR_TEXT.len()]> {
p: __ARC_STR_TEXT.as_ptr(),
}
.a,
}
};
#[allow(clippy::declare_interior_mutable_const)]
const __ARC_STR_FINAL: $crate::str::arcstr::ArcStr = unsafe { $crate::str::arcstr::ArcStr::_private_new_from_static_data(__ARC_STR_SI) };
__ARC_STR_FINAL
}
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __format_arcstr {
($format_string:expr $( $(, $expr:expr )+ )? $(,)? ) => {
$crate::str::arcstr::arcstr!(
$crate::str::arcstr::_private::formatcp!(
$format_string $( $(, $expr )+ )?
)
)
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __substr {
($text:expr $(,)?) => {{
const __S: &$crate::str::arcstr::_private::str = $text;
{
const PARENT: $crate::str::arcstr::ArcStr = $crate::str::arcstr::arcstr!(__S);
const SUBSTR: $crate::str::arcstr::Substr =
unsafe { $crate::str::arcstr::Substr::from_parts_unchecked(PARENT, 0..__S.len()) };
SUBSTR
}
}};
}
#[cfg(test)]
mod test {
use crate::str::arcstr::{arcstr, substr};
#[cfg(not(loom))]
use crate::str::arcstr::format_arcstr;
#[test]
fn ensure_no_import() {
let v = arcstr!("foo");
assert_eq!(v, "foo");
{
let substr = substr!("bar");
assert_eq!(substr, "bar");
}
#[cfg(not(loom))]
{
let test = format_arcstr!("foo");
assert_eq!(test, "foo");
const NUMBER: usize = 123;
let test2 = format_arcstr!("foo {NUMBER}");
assert_eq!(test2, "foo 123");
let test3 = format_arcstr!("foo {}", 123usize);
assert_eq!(test3, "foo 123");
}
}
}