[pbs-devel] [PATCH proxmox 1/3] tools: change constnamemap to a more automatic constnamedbitmap
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Oct 6 12:08:52 CEST 2020
We only used this for the privileges for now, and there it's a
nuisance to alter all bit definitions manually if something is added.
This change makes it count the bits up automatically.
Rename the macro to indicate that this is not a generic name map but
a more specific named bit mapping.
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
thanks to Wolfgang for his help here!
.../{constnamemap.rs => constnamedbitmap.rs} | 51 +++++++++++--------
proxmox/src/tools/mod.rs | 2 +-
2 files changed, 31 insertions(+), 22 deletions(-)
rename proxmox/src/tools/{constnamemap.rs => constnamedbitmap.rs} (50%)
diff --git a/proxmox/src/tools/constnamemap.rs b/proxmox/src/tools/constnamedbitmap.rs
similarity index 50%
rename from proxmox/src/tools/constnamemap.rs
rename to proxmox/src/tools/constnamedbitmap.rs
index 5a774e0..eb1ba87 100644
--- a/proxmox/src/tools/constnamemap.rs
+++ b/proxmox/src/tools/constnamedbitmap.rs
@@ -1,19 +1,23 @@
-/// A macro to generate a list of pub const variabales and
-/// an accompaning static array of a given name + value
-/// (with doc comments)
+/// A macro to generate a list of pub const variabales, and
+/// an accompaning static array of a given name, the values are automatically
+/// assigned to a bit (with doc comments)
///
/// Example:
/// ```
-/// # use proxmox::constnamemap;
+/// # use proxmox::constnamedbitmap;
///
-/// constnamemap! {
+/// constnamedbitmap! {
/// /// A list of privileges
/// PRIVS: u64 => {
/// /// Some comment for Priv1
-/// PRIV1("Priv1") = 1;
-/// PRIV2("Priv2") = 2;
+/// PRIV1("Priv1");
+/// PRIV2("Priv2");
+/// PRIV3("Priv3");
/// }
/// }
+/// # assert!(PRIV1 == 1<<0);
+/// # assert!(PRIV2 == 1<<1);
+/// # assert!(PRIV3 == 1<<2);
/// ```
///
/// this will generate the following variables:
@@ -21,15 +25,17 @@
/// /// Some comment for Priv1
/// pub const PRIV1: u64 = 1;
/// pub const PRIV2: u64 = 2;
+/// pub const PRIV3: u64 = 4;
///
/// /// A list of privileges
/// pub const PRIVS: &[(&str, u64)] = &[
-/// ("Priv1", 1),
-/// ("Priv2", 2),
+/// ("Priv1", PRIV1),
+/// ("Priv2", PRIV2),
+/// ("Priv3", PRIV3),
/// ];
/// ```
#[macro_export(local_inner_macros)]
-macro_rules! constnamemap {
+macro_rules! constnamedbitmap {
(
$(#[$outer:meta])*
$name:ident : $type:ty => {
@@ -37,7 +43,7 @@ macro_rules! constnamemap {
}
) => {
__constnamemap_consts! {
- $type => $($content)+
+ ($type) (0) => $($content)+
}
$(#[$outer])*
@@ -51,17 +57,20 @@ macro_rules! constnamemap {
#[doc(hidden)]
#[macro_export(local_inner_macros)]
macro_rules! __constnamemap_consts {
+ (($type:ty) ($counter:expr) => ) => {};
(
- $type:ty =>
+ ($type:ty) ($counter:expr) =>
+ $(#[$outer:meta])*
+ $name:ident($text:expr);
$(
- $(#[$outer:meta])*
- $name:ident($text:expr) = $value:expr;
- )+
+ $content:tt
+ )*
) => {
- $(
- $(#[$outer])*
- pub const $name: $type = $value;
- )+
+ $(#[$outer])*
+ pub const $name: $type = 1 << ($counter);
+ __constnamemap_consts! {
+ ($type) (1+$counter) => $($content)*
+ }
}
}
@@ -71,11 +80,11 @@ macro_rules! __constnamemap_entries {
(
$(
$(#[$outer:meta])*
- $name:ident($text:expr) = $value:expr;
+ $name:ident($text:expr);
)*
) => {
&[
- $(($text,$value),)*
+ $(($text,$name),)*
]
}
}
diff --git a/proxmox/src/tools/mod.rs b/proxmox/src/tools/mod.rs
index df6c429..a158372 100644
--- a/proxmox/src/tools/mod.rs
+++ b/proxmox/src/tools/mod.rs
@@ -9,7 +9,7 @@ pub mod as_any;
pub mod borrow;
pub mod byte_buffer;
pub mod common_regex;
-pub mod constnamemap;
+pub mod constnamedbitmap;
pub mod email;
pub mod fd;
pub mod fs;
More information about the pbs-devel
mailing list