20#ifndef ORES_VARIABILITY_DOMAIN_SYSTEM_FLAGS_HPP
21#define ORES_VARIABILITY_DOMAIN_SYSTEM_FLAGS_HPP
29#include <magic_enum/magic_enum.hpp>
31namespace ores::variability::domain {
44enum class system_flag {
70 disable_password_validation
79 std::string_view description;
89inline constexpr std::array system_flag_definitions = {
91 .flag = system_flag::bootstrap_mode,
92 .default_enabled =
true,
93 .description =
"Indicates whether the system is in bootstrap mode "
94 "(waiting for initial admin account)."
96 system_flag_definition {
97 .flag = system_flag::user_signups,
98 .default_enabled =
false,
99 .description =
"Controls whether user self-registration is allowed."
101 system_flag_definition {
102 .flag = system_flag::disable_password_validation,
103 .default_enabled =
false,
104 .description =
"When enabled, disables strict password validation. "
105 "FOR TESTING/DEVELOPMENT ONLY."
118[[nodiscard]]
inline std::string to_flag_name(system_flag flag) {
119 return std::string(
"system.") + std::string(magic_enum::enum_name(flag));
128[[nodiscard]]
inline std::optional<system_flag> from_flag_name(std::string_view name) {
129 constexpr std::string_view prefix =
"system.";
130 if (!name.starts_with(prefix)) {
134 auto enum_name = name.substr(prefix.size());
135 return magic_enum::enum_cast<system_flag>(enum_name);
144[[nodiscard]]
inline const system_flag_definition&
145get_definition(system_flag flag) {
146 for (
const auto& def : system_flag_definitions) {
147 if (def.flag == flag)
151 throw std::logic_error(
"Definition for system_flag not found.");
159inline std::ostream& operator<<(std::ostream& os, system_flag flag) {
160 return os << to_flag_name(flag);
Metadata for a system flag including its default state and description.
Definition system_flags.hpp:76