microfetch/crates/lib/src/desktop.rs
NotAShelf 472dbfc7e7
treewide: going no_std
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ia1c001eb099ea8cae9bdf76642b873376a6a6964
2026-03-27 21:39:41 +03:00

40 lines
1.1 KiB
Rust

use alloc::string::String;
use crate::getenv_str;
#[must_use]
#[cfg_attr(feature = "hotpath", hotpath::measure)]
pub fn get_desktop_info() -> String {
let desktop_raw = getenv_str("XDG_CURRENT_DESKTOP").unwrap_or("Unknown");
let session_raw = getenv_str("XDG_SESSION_TYPE").unwrap_or("");
let desktop_str = desktop_raw.strip_prefix("none+").unwrap_or(desktop_raw);
let backend_str = if session_raw.is_empty() {
"Unknown"
} else {
session_raw
};
// Pre-calculate capacity: desktop_len + " (" + backend_len + ")"
// Capitalize first char needs temporary allocation only if backend exists
let mut result =
String::with_capacity(desktop_str.len() + backend_str.len() + 3);
result.push_str(desktop_str);
result.push_str(" (");
// Capitalize first character of backend
if let Some(first_byte) = backend_str.as_bytes().first() {
// Convert first byte to uppercase if it's ASCII lowercase
let upper = if first_byte.is_ascii_lowercase() {
(first_byte - b'a' + b'A') as char
} else {
*first_byte as char
};
result.push(upper);
result.push_str(&backend_str[1..]);
}
result.push(')');
result
}