Skip to main content

synth_ai_core/tracing/
error.rs

1//! Tracing error types.
2
3use thiserror::Error;
4
5/// Errors that can occur during tracing operations.
6#[derive(Debug, Error)]
7pub enum TracingError {
8    /// Database connection or query error
9    #[error("database error: {0}")]
10    Database(String),
11
12    /// Session not started
13    #[error("no active session")]
14    NoActiveSession,
15
16    /// Timestep not started
17    #[error("no active timestep")]
18    NoActiveTimestep,
19
20    /// Session already active
21    #[error("session already active: {0}")]
22    SessionAlreadyActive(String),
23
24    /// Invalid state transition
25    #[error("invalid state: {0}")]
26    InvalidState(String),
27
28    /// Serialization error
29    #[error("serialization error: {0}")]
30    Serialization(String),
31
32    /// Storage initialization error
33    #[error("storage not initialized")]
34    NotInitialized,
35
36    /// Generic internal error
37    #[error("internal error: {0}")]
38    Internal(String),
39}
40
41impl From<serde_json::Error> for TracingError {
42    fn from(err: serde_json::Error) -> Self {
43        TracingError::Serialization(err.to_string())
44    }
45}
46
47#[cfg(feature = "libsql")]
48impl From<libsql::Error> for TracingError {
49    fn from(err: libsql::Error) -> Self {
50        TracingError::Database(err.to_string())
51    }
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn test_error_display() {
60        let err = TracingError::NoActiveSession;
61        assert_eq!(err.to_string(), "no active session");
62
63        let err = TracingError::Database("connection failed".to_string());
64        assert!(err.to_string().contains("connection failed"));
65    }
66}