Skip to main content

Mountain/IPC/DevLog/
IsEnabled.rs

1
2//! Tag-resolution helper. Reads `Trace` once into a static
3//! list, then matches against four rules per call:
4//!
5//! 1. Explicit tag match always wins.
6//! 2. `Trace=all` opens every tag.
7//! 3. `Trace=short` opens every tag *except* the firehose-mute list
8//!    (`SHORT_MODE_MUTED_TAGS`).
9//! 4. Otherwise the tag is closed.
10
11use std::sync::OnceLock;
12
13static ENABLED_TAGS:OnceLock<Vec<String>> = OnceLock::new();
14
15const SHORT_MODE_MUTED_TAGS:&[&str] = &[
16	"grpc-verbose",
17	"vfs-verbose",
18	"fs-route",
19	"tauri-invoke",
20	"rpc-latency",
21	"tree-latency",
22	"nls",
23	"fs-read",
24	"preflight",
25	"wsns",
26	"storage-verbose",
27	"config-prime",
28	"cel-dispatch",
29	"output-verbose",
30	"command-register",
31	"provider-register",
32	"ext-scan-verbose",
33	"channel-stub",
34	"commands-verbose",
35	"scheme-assets",
36	"cocoon-stderr-verbose",
37	"vscode-api-gap",
38];
39
40pub(super) fn EnabledTags() -> &'static Vec<String> {
41	ENABLED_TAGS.get_or_init(|| {
42		match std::env::var("Trace") {
43			Ok(Val) => Val.split(',').map(|S| S.trim().to_lowercase()).collect(),
44			Err(_) => vec![],
45		}
46	})
47}
48
49pub fn Fn(Tag:&str) -> bool {
50	let Tags = EnabledTags();
51
52	if Tags.is_empty() {
53		return false;
54	}
55
56	let Lower = Tag.to_lowercase();
57
58	if Tags.iter().any(|T| T == Lower.as_str()) {
59		return true;
60	}
61
62	if Tags.iter().any(|T| T == "all") {
63		return true;
64	}
65
66	if Tags.iter().any(|T| T == "short") {
67		return !SHORT_MODE_MUTED_TAGS.iter().any(|Muted| *Muted == Lower.as_str());
68	}
69
70	false
71}