reifydb_core/stream/
error.rs1use std::{fmt, sync::Arc};
7
8use reifydb_type::diagnostic::Diagnostic;
9
10pub type StreamResult<T> = Result<T, StreamError>;
12
13#[derive(Debug, Clone)]
15pub enum StreamError {
16 Query {
18 diagnostic: Arc<Diagnostic>,
20 statement: Option<String>,
22 },
23
24 Cancelled,
26
27 Timeout,
29
30 Disconnected,
32}
33
34impl fmt::Display for StreamError {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 match self {
37 StreamError::Query {
38 diagnostic,
39 ..
40 } => {
41 use reifydb_type::diagnostic::render::DefaultRenderer;
43 let rendered = DefaultRenderer::render_string(diagnostic);
44 write!(f, "{}", rendered)
45 }
46 StreamError::Cancelled => write!(f, "Query was cancelled"),
47 StreamError::Timeout => write!(f, "Query execution timed out"),
48 StreamError::Disconnected => write!(f, "Query stream disconnected unexpectedly"),
49 }
50 }
51}
52
53impl std::error::Error for StreamError {}
54
55impl From<reifydb_type::Error> for StreamError {
56 fn from(err: reifydb_type::Error) -> Self {
57 StreamError::Query {
58 diagnostic: Arc::new(err.diagnostic()),
59 statement: None,
60 }
61 }
62}
63
64impl StreamError {
65 pub fn query_with_statement(err: reifydb_type::Error, statement: String) -> Self {
67 let mut diagnostic = err.diagnostic();
68 diagnostic.with_statement(statement.clone());
70 StreamError::Query {
71 diagnostic: Arc::new(diagnostic),
72 statement: Some(statement),
73 }
74 }
75}