Skip to main content

adk_realtime/
error.rs

1//! Error types for the realtime module.
2
3use thiserror::Error;
4
5/// Result type for realtime operations.
6pub type Result<T> = std::result::Result<T, RealtimeError>;
7
8/// Errors that can occur during realtime operations.
9#[derive(Error, Debug)]
10pub enum RealtimeError {
11    /// WebSocket connection error.
12    #[error("WebSocket connection error: {0}")]
13    ConnectionError(String),
14
15    /// WebSocket message error.
16    #[error("WebSocket message error: {0}")]
17    MessageError(String),
18
19    /// Authentication error.
20    #[error("Authentication error: {0}")]
21    AuthError(String),
22
23    /// Session not connected.
24    #[error("Session not connected")]
25    NotConnected,
26
27    /// Session already closed.
28    #[error("Session already closed")]
29    SessionClosed,
30
31    /// Invalid configuration.
32    #[error("Invalid configuration: {0}")]
33    ConfigError(String),
34
35    /// Audio format error.
36    #[error("Audio format error: {0}")]
37    AudioFormatError(String),
38
39    /// Tool execution error.
40    #[error("Tool execution error: {0}")]
41    ToolError(String),
42
43    /// Server returned an error.
44    #[error("Server error: {code} - {message}")]
45    ServerError {
46        /// Error code from the server.
47        code: String,
48        /// Error message from the server.
49        message: String,
50    },
51
52    /// Timeout waiting for response.
53    #[error("Timeout: {0}")]
54    Timeout(String),
55
56    /// Serialization/deserialization error.
57    #[error("Serialization error: {0}")]
58    SerializationError(#[from] serde_json::Error),
59
60    /// Provider-specific error.
61    #[error("Provider error: {0}")]
62    ProviderError(String),
63
64    /// Generic IO error.
65    #[error("IO error: {0}")]
66    IoError(#[from] std::io::Error),
67
68    /// Opus codec error.
69    #[error("Opus codec error: {0}")]
70    OpusCodecError(String),
71
72    /// WebRTC error.
73    #[error("WebRTC error: {0}")]
74    WebRTCError(String),
75
76    /// LiveKit bridge error.
77    #[error("LiveKit error: {0}")]
78    LiveKitError(String),
79}
80
81impl RealtimeError {
82    /// Create a new connection error.
83    pub fn connection<S: Into<String>>(msg: S) -> Self {
84        Self::ConnectionError(msg.into())
85    }
86
87    /// Create a new server error.
88    pub fn server<S: Into<String>>(code: S, message: S) -> Self {
89        Self::ServerError { code: code.into(), message: message.into() }
90    }
91
92    /// Create a new provider error.
93    pub fn provider<S: Into<String>>(msg: S) -> Self {
94        Self::ProviderError(msg.into())
95    }
96
97    /// Create a new configuration error.
98    pub fn config<S: Into<String>>(msg: S) -> Self {
99        Self::ConfigError(msg.into())
100    }
101
102    /// Create a new protocol error.
103    pub fn protocol<S: Into<String>>(msg: S) -> Self {
104        Self::MessageError(msg.into())
105    }
106
107    /// Create a new audio format error.
108    pub fn audio<S: Into<String>>(msg: S) -> Self {
109        Self::AudioFormatError(msg.into())
110    }
111
112    /// Create a new Opus codec error.
113    pub fn opus(msg: impl Into<String>) -> Self {
114        Self::OpusCodecError(msg.into())
115    }
116
117    /// Create a new WebRTC error.
118    pub fn webrtc(msg: impl Into<String>) -> Self {
119        Self::WebRTCError(msg.into())
120    }
121
122    /// Create a new LiveKit error.
123    pub fn livekit(msg: impl Into<String>) -> Self {
124        Self::LiveKitError(msg.into())
125    }
126}