use thiserror::Error;
#[derive(Debug, Error)]
pub enum SessionError {
#[error("Session not found: {id}")]
NotFound { id: String },
#[error("Invalid session state: {state} for operation: {operation}")]
InvalidState { state: String, operation: String },
#[error("Failed to acquire session lock: {reason}")]
LockError { reason: String },
#[error("Failed to create session: {reason}")]
CreationFailed { reason: String },
#[error("Failed to terminate session: {reason}")]
TerminationFailed { reason: String },
#[error("Resource monitoring error: {reason}")]
ResourceError { reason: String },
#[error("Context bridge error: {reason}")]
ContextBridgeError { reason: String },
#[error("Session persistence error: {reason}")]
PersistenceError { reason: String },
#[error("Session pool error: {reason}")]
PoolError { reason: String },
#[error("Session memory error: {reason}")]
MemoryError { reason: String },
#[error("Session error: {0}")]
Other(#[from] anyhow::Error),
}
pub type SessionResult<T> = Result<T, SessionError>;
pub trait LockResultExt<T> {
fn map_lock_error(self) -> SessionResult<T>;
}
impl<T> LockResultExt<T> for std::sync::LockResult<T> {
fn map_lock_error(self) -> SessionResult<T> {
self.map_err(|e| SessionError::LockError {
reason: format!("Mutex poisoned: {}", e),
})
}
}