#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
pub enum Regime {
#[default]
Pluribus,
Slumbot,
}
static REGIME: std::sync::OnceLock<Regime> = std::sync::OnceLock::<Regime>::new();
pub fn regime() -> Regime {
*REGIME.get_or_init(|| Regime::Pluribus)
}
pub fn init_regime(r: Regime) {
if let Err(existing) = REGIME.set(r) {
assert_eq!(existing, r, "regime already set to {existing:?}, cannot change to {r:?}");
}
}
impl Regime {
pub fn suffix(self) -> &'static str {
match self {
Self::Pluribus => "_pluribus",
Self::Slumbot => "_slumbot",
}
}
}
impl std::fmt::Display for Regime {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Pluribus => write!(f, "pluribus"),
Self::Slumbot => write!(f, "slumbot"),
}
}
}
pub fn config_string(r: Regime) -> String {
use crate::*;
let common = format!(
"STACK={STACK};B_BLIND={B_BLIND};S_BLIND={S_BLIND};MAX_RAISE_REPEATS={MAX_RAISE_REPEATS};OPENS={OPENS:?}",
);
match r {
Regime::Pluribus => format!("{common};PLURIBUS_INDICES={PLURIBUS_INDICES:?};RAISES={RAISES:?}"),
Regime::Slumbot => format!("{common};SLUMBOT_INDICES={SLUMBOT_INDICES:?};RAISES={RAISES:?}"),
}
}