mirror of
https://git.proxmox.com/git/proxmox
synced 2025-08-14 05:19:25 +00:00
tools: change constnamemap to a more automatic constnamedbitmap
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@proxmox.com>
This commit is contained in:
parent
19dc729b7b
commit
82172720a4
@ -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),)*
|
||||
]
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user