Skip to main content

lumen_core/grad/
global.rs

1use std::cell::Cell;
2
3thread_local! {
4    static GRAD_ENABLED: Cell<bool> = Cell::new(true);
5}
6
7pub fn set_grad_enabled(enabled: bool) {
8    GRAD_ENABLED.with(|c| c.set(enabled));
9}
10
11pub fn is_grad_enabled() -> bool {
12    GRAD_ENABLED.with(|c| c.get())
13}
14
15pub struct NoGradGuard {
16    prev: bool,
17}
18
19impl NoGradGuard {
20    pub fn new() -> Self {
21        let prev = is_grad_enabled();
22        set_grad_enabled(false);
23        Self { prev }
24    }
25}
26
27impl Drop for NoGradGuard {
28    fn drop(&mut self) {
29        set_grad_enabled(self.prev);
30    }
31}