use std::sync::PoisonError;
pub type Result<T, E = Error> = core::result::Result<T, E>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Garbage collection phase error: {0}")]
CollectionPhaseError(String),
#[error("Invalid garbage collection pointer: {0}")]
InvalidPointer(String),
#[error("Failed to acquire lock: {0}")]
LockError(String),
#[error("Failed to manage GC roots: {0}")]
RootError(String),
#[error("Failed to access garbage collection statistics: {0}")]
StatsError(String),
#[error("Thread synchronization error: {0}")]
SyncError(String),
}
impl<T> From<PoisonError<T>> for Error {
fn from(error: PoisonError<T>) -> Self {
Error::LockError(format!("Poisoned lock: {error}"))
}
}
#[cfg(all(test, not(target_family = "wasm")))]
mod tests {
use super::*;
#[test]
fn test_from_poison_error() {
let poison_error: PoisonError<()> = PoisonError::new(());
let error: Error = poison_error.into();
assert!(matches!(error, Error::LockError(_)));
}
}