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;