Skip to main content

Mountain/IPC/DevLog/
IsEnabled.rs

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