From 0c5e2640d00024d8a37d6bb618b28437e0edc443 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Fri, 15 Mar 2024 12:27:29 +0100 Subject: [PATCH] proxmox-schema: use const_format to define static strings. Macro rules are not hygienic, and current rust macro visibility rules are a nightmare. Using const_format::concatcp!() is a much cleaner solution. Signed-off-by: Dietmar Maurer --- Cargo.toml | 1 + proxmox-schema/Cargo.toml | 3 ++- proxmox-schema/src/api_types.rs | 12 +++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 58d5a67e..032ef65d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ base32 = "0.4" base64 = "0.13" bitflags = "1.2.1" bytes = "1.0" +const_format = "0.2" crc32fast = "1" crossbeam-channel = "0.5" endian_trait = "0.6" diff --git a/proxmox-schema/Cargo.toml b/proxmox-schema/Cargo.toml index ae068181..1c150b2c 100644 --- a/proxmox-schema/Cargo.toml +++ b/proxmox-schema/Cargo.toml @@ -11,6 +11,7 @@ exclude.workspace = true [dependencies] anyhow.workspace = true +const_format = { workspace = true, optional = true } lazy_static.workspace = true regex.workspace = true serde.workspace = true @@ -33,7 +34,7 @@ default = [] api-macro = ["dep:proxmox-api-macro"] upid-api-impl = [ "dep:libc", "dep:nix" ] -api-types = [] +api-types = [ "dep:const_format" ] # Testing only test-harness = [] diff --git a/proxmox-schema/src/api_types.rs b/proxmox-schema/src/api_types.rs index 0cec043c..4e10ebb4 100644 --- a/proxmox-schema/src/api_types.rs +++ b/proxmox-schema/src/api_types.rs @@ -1,10 +1,10 @@ //! The "basic" api types we generally require along with some of their macros. +use const_format::concatcp; use crate::{ApiStringFormat, Schema, StringSchema}; #[rustfmt::skip] -#[macro_export] -macro_rules! SAFE_ID_REGEX_STR { () => { r"(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)" }; } +const SAFE_ID_REGEX_STR: &str = r"(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)"; const_regex! { /// Regex for safe identifiers. @@ -14,9 +14,11 @@ const_regex! { /// contains further information why it is reasonable to restict /// names this way. This is not only useful for filenames, but for /// any identifier command line tools work with. - pub SAFE_ID_REGEX = concat!(r"^", SAFE_ID_REGEX_STR!(), r"$"); - pub PASSWORD_REGEX = r"^[[:^cntrl:]]*$"; // everything but control characters - pub SINGLE_LINE_COMMENT_REGEX = r"^[[:^cntrl:]]*$"; // everything but control characters + pub SAFE_ID_REGEX = concatcp!(r"^", SAFE_ID_REGEX_STR, r"$"); + /// Password. Allow everything but control characters. + pub PASSWORD_REGEX = r"^[[:^cntrl:]]*$"; + /// Single line comment. Allow everything but control characters. + pub SINGLE_LINE_COMMENT_REGEX = r"^[[:^cntrl:]]*$"; } pub const SAFE_ID_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&SAFE_ID_REGEX); -- 2.39.2