summaryrefslogtreecommitdiffstats
path: root/third_party/rust/tinystr/src/macros.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/tinystr/src/macros.rs')
-rw-r--r--third_party/rust/tinystr/src/macros.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/third_party/rust/tinystr/src/macros.rs b/third_party/rust/tinystr/src/macros.rs
new file mode 100644
index 0000000000..b00185238e
--- /dev/null
+++ b/third_party/rust/tinystr/src/macros.rs
@@ -0,0 +1,32 @@
+// This file is part of ICU4X. For terms of use, please see the file
+// called LICENSE at the top level of the ICU4X source tree
+// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+#[macro_export]
+macro_rules! tinystr {
+ ($n:literal, $s:literal) => {{
+ // Force it into a const context; otherwise it may get evaluated at runtime instead.
+ const TINYSTR_MACRO_CONST: $crate::TinyAsciiStr<$n> = {
+ match $crate::TinyAsciiStr::from_bytes($s.as_bytes()) {
+ Ok(s) => s,
+ // We are okay with panicking here because this is in a const context
+ #[allow(clippy::panic)]
+ // Cannot format the error since formatting isn't const yet
+ Err(_) => panic!(concat!("Failed to construct tinystr from ", $s)),
+ }
+ };
+ TINYSTR_MACRO_CONST
+ }};
+}
+
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn test_macro_construction() {
+ let s1 = tinystr!(8, "foobar");
+ assert_eq!(&*s1, "foobar");
+
+ let s1 = tinystr!(12, "foobarbaz");
+ assert_eq!(&*s1, "foobarbaz");
+ }
+}