#![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, } static NORMALIZED_ENV_LOCK: Lazy> = 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"); } } }