Skip to main content

phemios_core/
session_cleanup.rs

1//! Independent teardown steps after a session has already been invalidated.
2/// Complete source teardown followed by credential revocation or engine shutdown.
3/// Both failures must remain visible; callers invalidate the native owner first.
4pub fn complete(
5    cleanup: impl FnOnce() -> Result<(), String>,
6    release: impl FnOnce() -> Result<(), String>,
7) -> Result<(), String> {
8    let cleanup = cleanup();
9    let release = release();
10    match (cleanup, release) {
11        (Ok(()), Ok(())) => Ok(()),
12        (Err(error), Ok(())) | (Ok(()), Err(error)) => Err(error),
13        (Err(first), Err(second)) => Err(format!("{first}\n{second}")),
14    }
15}
16#[cfg(test)]
17#[path = "session_cleanup_tests.rs"]
18mod tests;