use thiserror::Error;
#[derive(Debug, Error)]
pub enum TracingError {
#[error("database error: {0}")]
Database(String),
#[error("no active session")]
NoActiveSession,
#[error("no active timestep")]
NoActiveTimestep,
#[error("session already active: {0}")]
SessionAlreadyActive(String),
#[error("invalid state: {0}")]
InvalidState(String),
#[error("serialization error: {0}")]
Serialization(String),
#[error("storage not initialized")]
NotInitialized,
#[error("internal error: {0}")]
Internal(String),
}
impl From<serde_json::Error> for TracingError {
fn from(err: serde_json::Error) -> Self {
TracingError::Serialization(err.to_string())
}
}
#[cfg(feature = "libsql")]
impl From<libsql::Error> for TracingError {
fn from(err: libsql::Error) -> Self {
TracingError::Database(err.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = TracingError::NoActiveSession;
assert_eq!(err.to_string(), "no active session");
let err = TracingError::Database("connection failed".to_string());
assert!(err.to_string().contains("connection failed"));
}
}