Skip to main content

rvoip_vapi/
error.rs

1//! Error types for the Vapi adapter.
2
3use thiserror::Error;
4
5/// A diagnostic-safe Vapi adapter failure.
6///
7/// Variants intentionally do not retain API keys, WebSocket URLs, response
8/// bodies, transcripts, or assistant definitions.
9#[derive(Clone, Copy, Debug, Eq, Error, PartialEq)]
10#[non_exhaustive]
11pub enum VapiError {
12    #[error("invalid Vapi configuration: {0}")]
13    InvalidConfiguration(&'static str),
14    #[error("invalid Vapi call options: {0}")]
15    InvalidCallOptions(&'static str),
16    #[error("Vapi HTTP request failed")]
17    Http,
18    #[error("Vapi HTTP request timed out")]
19    HttpTimeout,
20    #[error("Vapi returned HTTP status {0}")]
21    HttpStatus(u16),
22    #[error("Vapi returned an invalid call response: {0}")]
23    InvalidResponse(&'static str),
24    #[error("Vapi WebSocket setup failed")]
25    WebSocketSetup,
26    #[error("Vapi WebSocket I/O failed")]
27    WebSocketIo,
28    #[error("Vapi WebSocket operation timed out")]
29    WebSocketTimeout,
30    #[error("Vapi media queue overflowed")]
31    MediaQueueOverflow,
32    #[error("Vapi control queue is unavailable")]
33    ControlQueueUnavailable,
34    #[error("Vapi control message exceeds the configured size limit")]
35    ControlMessageTooLarge,
36    #[error("Vapi connection is not active")]
37    NotActive,
38}
39
40pub type Result<T> = std::result::Result<T, VapiError>;
41
42impl From<VapiError> for rvoip_core::RvoipError {
43    fn from(error: VapiError) -> Self {
44        rvoip_core::RvoipError::Adapter(error.to_string())
45    }
46}