#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum UserPrivilege {
Abort,
ConfigAdapter,
ConfigApp,
ConfigDatabase,
ConfigEngine,
ConfigModel,
ConfigReport,
Configure,
CtrlExecFlow,
Debug,
Develop,
EditProcessModelFiles,
EditRuntimeVariables,
EditSequenceFiles,
EditStationGlobals,
EditTemplates,
EditTypes,
EditUsers,
EditWorkspace,
Execute,
GrantAll,
LoopSelectedTests,
Operate,
RunAnySequence,
RunSelectedTests,
SaveSequenceFiles,
SinglePass,
Terminate,
UseSourceControl,
}
impl UserPrivilege {
pub const ALL: [Self; 29] = [
Self::Abort,
Self::ConfigAdapter,
Self::ConfigApp,
Self::ConfigDatabase,
Self::ConfigEngine,
Self::ConfigModel,
Self::ConfigReport,
Self::Configure,
Self::CtrlExecFlow,
Self::Debug,
Self::Develop,
Self::EditProcessModelFiles,
Self::EditRuntimeVariables,
Self::EditSequenceFiles,
Self::EditStationGlobals,
Self::EditTemplates,
Self::EditTypes,
Self::EditUsers,
Self::EditWorkspace,
Self::Execute,
Self::GrantAll,
Self::LoopSelectedTests,
Self::Operate,
Self::RunAnySequence,
Self::RunSelectedTests,
Self::SaveSequenceFiles,
Self::SinglePass,
Self::Terminate,
Self::UseSourceControl,
];
#[must_use]
pub const fn name(self) -> &'static str {
match self {
Self::Abort => "Abort",
Self::ConfigAdapter => "ConfigAdapter",
Self::ConfigApp => "ConfigApp",
Self::ConfigDatabase => "ConfigDatabase",
Self::ConfigEngine => "ConfigEngine",
Self::ConfigModel => "ConfigModel",
Self::ConfigReport => "ConfigReport",
Self::Configure => "Configure",
Self::CtrlExecFlow => "ControlExecFlow",
Self::Debug => "Debug",
Self::Develop => "Develop",
Self::EditProcessModelFiles => "EditProcessModelFiles",
Self::EditRuntimeVariables => "EditRuntimeVariables",
Self::EditSequenceFiles => "EditSequenceFiles",
Self::EditStationGlobals => "EditStationGlobals",
Self::EditTemplates => "EditTemplates",
Self::EditTypes => "EditTypes",
Self::EditUsers => "EditUsers",
Self::EditWorkspace => "EditWorkspace",
Self::Execute => "Execute",
Self::GrantAll => "GrantAll",
Self::LoopSelectedTests => "LoopSelectedTests",
Self::Operate => "Operate",
Self::RunAnySequence => "RunAnySequence",
Self::RunSelectedTests => "RunSelectedTests",
Self::SaveSequenceFiles => "SaveSequenceFiles",
Self::SinglePass => "SinglePass",
Self::Terminate => "Terminate",
Self::UseSourceControl => "UseSourceControl",
}
}
}
#[cfg(test)]
mod tests {
use super::UserPrivilege;
#[test]
fn every_privilege_name_is_distinct() {
let mut names: Vec<&str> = UserPrivilege::ALL.iter().map(|p| p.name()).collect();
names.sort_unstable();
let count = names.len();
names.dedup();
assert_eq!(names.len(), count);
}
#[test]
fn the_constant_and_its_value_can_differ() {
assert_eq!(UserPrivilege::CtrlExecFlow.name(), "ControlExecFlow");
assert_eq!(UserPrivilege::Debug.name(), "Debug");
}
}