1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum MvError {
8 #[error("materialized view already exists: {0}")]
10 DuplicateName(String),
11
12 #[error("source not found: {0}")]
14 SourceNotFound(String),
15
16 #[error("dependency cycle detected involving: {0}")]
18 CycleDetected(String),
19
20 #[error("materialized view not found: {0}")]
22 ViewNotFound(String),
23
24 #[error("operator not found for view: {0}")]
26 OperatorNotFound(String),
27
28 #[error("cannot drop view '{0}': dependent views exist: {1:?}")]
30 HasDependents(String, Vec<String>),
31
32 #[error("operator error: {0}")]
34 OperatorError(#[from] crate::operator::OperatorError),
35
36 #[error("serialization error: {0}")]
38 SerializationError(String),
39
40 #[error("view '{0}' is in invalid state: {1:?}")]
42 InvalidState(String, MvState),
43
44 #[error("watermark propagation error: {0}")]
46 WatermarkError(String),
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
51pub enum MvState {
52 #[default]
54 Running,
55 Paused,
57 Error,
59 Dropping,
61}
62
63impl MvState {
64 #[must_use]
66 pub fn can_process(&self) -> bool {
67 matches!(self, Self::Running)
68 }
69
70 #[must_use]
72 pub fn is_error(&self) -> bool {
73 matches!(self, Self::Error)
74 }
75}