| 1 | macro_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 | define_uuid_macro! { |
| 35 | /// Parse [`Uuid`][uuid::Uuid]s from string literals at compile time. |
| 36 | /// |
| 37 | /// ## Usage |
| 38 | /// |
| 39 | /// This macro transforms the string literal representation of a |
| 40 | /// [`Uuid`][uuid::Uuid] into the bytes representation, raising a compilation |
| 41 | /// error if it cannot properly be parsed. |
| 42 | /// |
| 43 | /// ## Examples |
| 44 | /// |
| 45 | /// Setting a global constant: |
| 46 | /// |
| 47 | /// ``` |
| 48 | /// # use uuid::{uuid, Uuid}; |
| 49 | /// pub const SCHEMA_ATTR_CLASS: Uuid = uuid!("00000000-0000-0000-0000-ffff00000000"); |
| 50 | /// pub const SCHEMA_ATTR_UUID: Uuid = uuid!("00000000-0000-0000-0000-ffff00000001"); |
| 51 | /// pub const SCHEMA_ATTR_NAME: Uuid = uuid!("00000000-0000-0000-0000-ffff00000002"); |
| 52 | /// ``` |
| 53 | /// |
| 54 | /// Defining a local variable: |
| 55 | /// |
| 56 | /// ``` |
| 57 | /// # use uuid::uuid; |
| 58 | /// let uuid = uuid!("urn:uuid:F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4"); |
| 59 | /// ``` |
| 60 | /// Using a const variable: |
| 61 | /// ``` |
| 62 | /// # use uuid::uuid; |
| 63 | /// const UUID_STR: &str = "12345678-1234-5678-1234-567812345678"; |
| 64 | /// let UUID = uuid!(UUID_STR); |
| 65 | /// ``` |
| 66 | /// |
| 67 | /// ## Compilation Failures |
| 68 | /// |
| 69 | /// Invalid UUIDs are rejected: |
| 70 | /// |
| 71 | /// ```compile_fail |
| 72 | /// # use uuid::uuid; |
| 73 | /// let uuid = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4"); |
| 74 | /// ``` |
| 75 | /// |
| 76 | /// Enable the feature `macro-diagnostics` to see the error messages below. |
| 77 | /// |
| 78 | /// Provides the following compilation error: |
| 79 | /// |
| 80 | /// ```txt |
| 81 | /// error: invalid character: expected an optional prefix of `urn:uuid:` followed by [0-9a-fA-F-], found Z at 9 |
| 82 | /// | |
| 83 | /// | let id = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4"); |
| 84 | /// | ^ |
| 85 | /// ``` |
| 86 | /// |
| 87 | /// [uuid::Uuid]: https://docs.rs/uuid/*/uuid/struct.Uuid.html |
| 88 | } |
| 89 |
Definitions
Learn Rust with the experts
Find out more
