1// This file is part of ICU4X. For terms of use, please see the file
2// called LICENSE at the top level of the ICU4X source tree
3// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5#[macro_export]
6macro_rules! tinystr {
7 ($n:literal, $s:literal) => {{
8 // Force it into a const context; otherwise it may get evaluated at runtime instead.
9 const TINYSTR_MACRO_CONST: $crate::TinyAsciiStr<$n> = {
10 match $crate::TinyAsciiStr::from_bytes($s.as_bytes()) {
11 Ok(s) => s,
12 // We are okay with panicking here because this is in a const context
13 #[allow(clippy::panic)]
14 // Cannot format the error since formatting isn't const yet
15 Err(_) => panic!(concat!("Failed to construct tinystr from ", $s)),
16 }
17 };
18 TINYSTR_MACRO_CONST
19 }};
20}
21
22#[cfg(test)]
23mod tests {
24 #[test]
25 fn test_macro_construction() {
26 let s1 = tinystr!(8, "foobar");
27 assert_eq!(&*s1, "foobar");
28
29 let s1 = tinystr!(12, "foobarbaz");
30 assert_eq!(&*s1, "foobarbaz");
31 }
32}
33