use windows::Win32::System::Com::CoUninitialize;
pub struct ComGuard {
_private: (), }
impl ComGuard {
pub(crate) fn new() -> Self {
Self { _private: () }
}
}
impl Drop for ComGuard {
fn drop(&mut self) {
unsafe {
CoUninitialize();
}
}
}
#[allow(dead_code)]
pub struct SessionCleanup;
#[allow(dead_code)]
impl SessionCleanup {
pub const CLEANUP_ORDER: &'static str =
"1. drop(inventory) → 2. drop(presentation) → 3. excel.Quit() → 4. ppt.Quit() → 5. CoUninitialize";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_cleanup_order_documented() {
assert!(SessionCleanup::CLEANUP_ORDER.contains("inventory"));
assert!(SessionCleanup::CLEANUP_ORDER.contains("presentation"));
assert!(SessionCleanup::CLEANUP_ORDER.contains("Quit"));
assert!(SessionCleanup::CLEANUP_ORDER.contains("CoUninitialize"));
}
}