rumdl_lib/code_block_tools/
run_state.rs1use std::collections::BTreeMap;
4use std::sync::Mutex;
5use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
6
7#[derive(Debug, Default)]
8pub struct RunState {
9 executions: AtomicUsize,
10 aborted: AtomicBool,
11 cached_checks: AtomicUsize,
12 warnings: Mutex<BTreeMap<String, String>>,
13 pub(super) versions: super::versions::VersionState,
14}
15
16impl PartialEq for RunState {
18 fn eq(&self, _other: &Self) -> bool {
19 true
20 }
21}
22impl Eq for RunState {}
23
24impl RunState {
25 pub fn abort(&self) {
26 self.aborted.store(true, Ordering::Relaxed);
27 }
28 pub fn aborted(&self) -> bool {
29 self.aborted.load(Ordering::Relaxed)
30 }
31 pub fn record_execution(&self) {
32 self.executions.fetch_add(1, Ordering::Relaxed);
33 }
34 pub fn record_cached_check(&self) {
35 self.cached_checks.fetch_add(1, Ordering::Relaxed);
36 }
37 pub fn checked_anything(&self) -> bool {
38 self.executions.load(Ordering::Relaxed) > 0 || self.cached_checks.load(Ordering::Relaxed) > 0
39 }
40 pub fn warn(&self, key: String, message: String) {
41 self.warnings
42 .lock()
43 .unwrap_or_else(std::sync::PoisonError::into_inner)
44 .entry(key)
45 .or_insert(message);
46 }
47 pub fn warnings(&self) -> Vec<String> {
48 self.warnings
49 .lock()
50 .unwrap_or_else(std::sync::PoisonError::into_inner)
51 .values()
52 .cloned()
53 .collect()
54 }
55}