///| This function is for testing only.
/// Do not use this in production code.
/// It is not thread-safe.
pub fn[R, E : Error] temp_env(
temp_envs : Map[String, String],
f : () -> R raise E,
) -> R raise E {
let original_vars = @sys.get_env_vars()
for key, value in temp_envs {
@sys.set_env_var(key, value)
}
let result = f() catch {
e => {
// Restore environment before re-raising
for key, value in original_vars {
@sys.set_env_var(key, value)
}
raise e
}
}
for key, value in original_vars {
@sys.set_env_var(key, value)
}
result
}