39 lines
1.2 KiB
Rust
39 lines
1.2 KiB
Rust
|
|
#![cfg(feature = "normalized_dev")]
|
||
|
|
|
||
|
|
use once_cell::sync::Lazy;
|
||
|
|
use std::sync::Mutex;
|
||
|
|
|
||
|
|
/// RAII guard for normalized_dev env toggling (NYASH_JOINIR_NORMALIZED_DEV_RUN).
|
||
|
|
/// 汚染防止のため tests/runner の両方で再利用できるようにここに置く。
|
||
|
|
pub struct NormalizedDevEnvGuard {
|
||
|
|
_lock: std::sync::MutexGuard<'static, ()>,
|
||
|
|
prev: Option<String>,
|
||
|
|
}
|
||
|
|
|
||
|
|
static NORMALIZED_ENV_LOCK: Lazy<Mutex<()>> = Lazy::new(|| Mutex::new(()));
|
||
|
|
|
||
|
|
impl NormalizedDevEnvGuard {
|
||
|
|
pub fn new(enabled: bool) -> Self {
|
||
|
|
let lock = NORMALIZED_ENV_LOCK
|
||
|
|
.lock()
|
||
|
|
.expect("normalized env mutex poisoned");
|
||
|
|
let prev = std::env::var("NYASH_JOINIR_NORMALIZED_DEV_RUN").ok();
|
||
|
|
if enabled {
|
||
|
|
std::env::set_var("NYASH_JOINIR_NORMALIZED_DEV_RUN", "1");
|
||
|
|
} else {
|
||
|
|
std::env::remove_var("NYASH_JOINIR_NORMALIZED_DEV_RUN");
|
||
|
|
}
|
||
|
|
Self { _lock: lock, prev }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
impl Drop for NormalizedDevEnvGuard {
|
||
|
|
fn drop(&mut self) {
|
||
|
|
if let Some(prev) = &self.prev {
|
||
|
|
std::env::set_var("NYASH_JOINIR_NORMALIZED_DEV_RUN", prev);
|
||
|
|
} else {
|
||
|
|
std::env::remove_var("NYASH_JOINIR_NORMALIZED_DEV_RUN");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|