1macro_rules! define_uuid_macro {
2 {$(#[$doc:meta])*} => {
3 $(#[$doc])*
4 #[cfg(feature = "macro-diagnostics")]
5 #[macro_export]
6 macro_rules! uuid {
7 ($uuid:expr) => {{
8 const OUTPUT: $crate::Uuid = match $crate::Uuid::try_parse($uuid) {
9 $crate::__macro_support::Ok(u) => u,
10 $crate::__macro_support::Err(_) => panic!("invalid UUID"),
11 };
12 OUTPUT
13 }};
14 ($uuid:literal) => {{
15 $crate::Uuid::from_bytes($crate::uuid_macro_internal::parse_lit!($uuid))
16 }};
17 }
18
19 $(#[$doc])*
20 #[cfg(not(feature = "macro-diagnostics"))]
21 #[macro_export]
22 macro_rules! uuid {
23 ($uuid:expr) => {{
24 const OUTPUT: $crate::Uuid = match $crate::Uuid::try_parse($uuid) {
25 $crate::__macro_support::Ok(u) => u,
26 $crate::__macro_support::Err(_) => panic!("invalid UUID"),
27 };
28 OUTPUT
29 }};
30 }
31 }
32}
33
34#[doc = r" Parse [`Uuid`][uuid::Uuid]s from string literals at compile time."]
#[doc = r""]
#[doc = r" ## Usage"]
#[doc = r""]
#[doc = r" This macro transforms the string literal representation of a"]
#[doc =
r" [`Uuid`][uuid::Uuid] into the bytes representation, raising a compilation"]
#[doc = r" error if it cannot properly be parsed."]
#[doc = r""]
#[doc = r" ## Examples"]
#[doc = r""]
#[doc = r" Setting a global constant:"]
#[doc = r""]
#[doc = r" ```"]
#[doc = r" # use uuid::{uuid, Uuid};"]
#[doc =
r#" pub const SCHEMA_ATTR_CLASS: Uuid = uuid!("00000000-0000-0000-0000-ffff00000000");"#]
#[doc =
r#" pub const SCHEMA_ATTR_UUID: Uuid = uuid!("00000000-0000-0000-0000-ffff00000001");"#]
#[doc =
r#" pub const SCHEMA_ATTR_NAME: Uuid = uuid!("00000000-0000-0000-0000-ffff00000002");"#]
#[doc = r" ```"]
#[doc = r""]
#[doc = r" Defining a local variable:"]
#[doc = r""]
#[doc = r" ```"]
#[doc = r" # use uuid::uuid;"]
#[doc =
r#" let uuid = uuid!("urn:uuid:F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4");"#]
#[doc = r" ```"]
#[doc = r" Using a const variable:"]
#[doc = r" ```"]
#[doc = r" # use uuid::uuid;"]
#[doc = r#" const UUID_STR: &str = "12345678-1234-5678-1234-567812345678";"#]
#[doc = r" let UUID = uuid!(UUID_STR);"]
#[doc = r" ```"]
#[doc = r""]
#[doc = r" ## Compilation Failures"]
#[doc = r""]
#[doc = r" Invalid UUIDs are rejected:"]
#[doc = r""]
#[doc = r" ```compile_fail"]
#[doc = r" # use uuid::uuid;"]
#[doc = r#" let uuid = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");"#]
#[doc = r" ```"]
#[doc = r""]
#[doc =
r" Enable the feature `macro-diagnostics` to see the error messages below."]
#[doc = r""]
#[doc = r" Provides the following compilation error:"]
#[doc = r""]
#[doc = r" ```txt"]
#[doc =
r" error: invalid character: expected an optional prefix of `urn:uuid:` followed by [0-9a-fA-F-], found Z at 9"]
#[doc = r" |"]
#[doc =
r#" | let id = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");"#]
#[doc = r" | ^"]
#[doc = r" ```"]
#[doc = r""]
#[doc = r" [uuid::Uuid]: https://docs.rs/uuid/*/uuid/struct.Uuid.html"]
#[macro_export]
macro_rules! uuid {
($uuid : expr) =>
{{
const OUTPUT : crate :: Uuid = match crate :: Uuid ::
try_parse($uuid)
{
crate :: __macro_support :: Ok(u) => u, crate ::
__macro_support :: Err(_) => panic! ("invalid UUID"),
}; OUTPUT
}};
}define_uuid_macro! {
35}
89
90#[cfg(not(all(uuid_unstable, feature = "zerocopy")))]
98macro_rules! unsafe_transmute_ref(
99 ($e:expr) => { unsafe { core::mem::transmute::<&_, &_>($e) } }
100);
101
102#[cfg(all(uuid_unstable, feature = "zerocopy"))]
104macro_rules! unsafe_transmute_ref(
105 ($e:expr) => { zerocopy::transmute_ref!($e) }
106);
107
108#[cfg(not(all(uuid_unstable, feature = "zerocopy")))]
110macro_rules! unsafe_transmute(
111 ($e:expr) => { unsafe { core::mem::transmute::<_, _>($e) } }
112);
113
114#[cfg(all(uuid_unstable, feature = "zerocopy"))]
116macro_rules! unsafe_transmute(
117 ($e:expr) => { zerocopy::transmute!($e) }
118);