summaryrefslogtreecommitdiffstats
path: root/third_party/rust/uuid/src/macros.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/uuid/src/macros.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/uuid/src/macros.rs')
-rw-r--r--third_party/rust/uuid/src/macros.rs99
1 files changed, 99 insertions, 0 deletions
diff --git a/third_party/rust/uuid/src/macros.rs b/third_party/rust/uuid/src/macros.rs
new file mode 100644
index 0000000000..281c5335f2
--- /dev/null
+++ b/third_party/rust/uuid/src/macros.rs
@@ -0,0 +1,99 @@
+macro_rules! define_uuid_macro {
+ {$(#[$doc:meta])*} => {
+ $(#[$doc])*
+ #[cfg(feature = "macro-diagnostics")]
+ #[macro_export]
+ macro_rules! uuid {
+ ($uuid:literal) => {{
+ $crate::Uuid::from_bytes($crate::uuid_macro_internal::parse_lit!($uuid))
+ }};
+ }
+
+ $(#[$doc])*
+ #[cfg(not(feature = "macro-diagnostics"))]
+ #[macro_export]
+ macro_rules! uuid {
+ ($uuid:literal) => {{
+ const OUTPUT: $crate::Uuid = match $crate::Uuid::try_parse($uuid) {
+ Ok(u) => u,
+ Err(_) => {
+ // here triggers const_err
+ // const_panic requires 1.57
+ #[allow(unconditional_panic)]
+ let _ = ["invalid uuid representation"][1];
+
+ loop {} // -> never type
+ }
+ };
+ OUTPUT
+ }};
+ }
+ }
+}
+
+define_uuid_macro! {
+/// Parse [`Uuid`][uuid::Uuid]s from string literals at compile time.
+///
+/// ## Usage
+///
+/// This macro transforms the string literal representation of a
+/// [`Uuid`][uuid::Uuid] into the bytes representation, raising a compilation
+/// error if it cannot properly be parsed.
+///
+/// ## Examples
+///
+/// Setting a global constant:
+///
+/// ```
+/// # use uuid::{uuid, Uuid};
+/// pub const SCHEMA_ATTR_CLASS: Uuid = uuid!("00000000-0000-0000-0000-ffff00000000");
+/// pub const SCHEMA_ATTR_UUID: Uuid = uuid!("00000000-0000-0000-0000-ffff00000001");
+/// pub const SCHEMA_ATTR_NAME: Uuid = uuid!("00000000-0000-0000-0000-ffff00000002");
+/// ```
+///
+/// Defining a local variable:
+///
+/// ```
+/// # use uuid::uuid;
+/// let uuid = uuid!("urn:uuid:F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4");
+/// ```
+///
+/// ## Compilation Failures
+///
+/// Invalid UUIDs are rejected:
+///
+/// ```compile_fail
+/// # use uuid::uuid;
+/// let uuid = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");
+/// ```
+///
+/// Enable the feature `macro-diagnostics` to see the error messages below.
+///
+/// Provides the following compilation error:
+///
+/// ```txt
+/// error: invalid character: expected an optional prefix of `urn:uuid:` followed by [0-9a-fA-F-], found Z at 9
+/// |
+/// | let id = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");
+/// | ^
+/// ```
+///
+/// Tokens that aren't string literals are also rejected:
+///
+/// ```compile_fail
+/// # use uuid::uuid;
+/// let uuid_str: &str = "550e8400e29b41d4a716446655440000";
+/// let uuid = uuid!(uuid_str);
+/// ```
+///
+/// Provides the following compilation error:
+///
+/// ```txt
+/// error: expected string literal
+/// |
+/// | let uuid = uuid!(uuid_str);
+/// | ^^^^^^^^
+/// ```
+///
+/// [uuid::Uuid]: https://docs.rs/uuid/*/uuid/struct.Uuid.html
+}