Heavily customized version of smokesignal - https://whtwnd.com/kayrozen.com/3lpwe4ymowg2t
1// Error types for the filtering module
2//
3// Defines error types specific to event filtering operations,
4// integrating with the existing error handling patterns.
5
6use thiserror::Error;
7
8/// Errors that can occur during filtering operations
9#[derive(Error, Debug)]
10pub enum FilterError {
11 #[error("Database error: {0}")]
12 Database(#[from] sqlx::Error),
13
14 #[error("Storage error: {0}")]
15 Storage(#[from] crate::storage::errors::StorageError),
16
17 #[error("Invalid filter criteria: {0}")]
18 InvalidCriteria(String),
19
20 #[error("Invalid location parameters: {0}")]
21 InvalidLocation(String),
22
23 #[error("Invalid date range: {0}")]
24 InvalidDateRange(String),
25
26 #[error("Pagination error: {0}")]
27 InvalidPagination(String),
28
29 #[error("Query building error: {0}")]
30 QueryBuilder(String),
31
32 #[error("Facet calculation error: {0}")]
33 FacetCalculation(String),
34
35 #[error("Event hydration error: {0}")]
36 Hydration(String),
37
38 #[error("Cache error: {0}")]
39 Cache(String),
40
41 #[error("Serialization error: {0}")]
42 Serialization(#[from] serde_json::Error),
43}
44
45/// Result type for filtering operations
46pub type FilterResult<T> = Result<T, FilterError>;
47
48impl FilterError {
49 /// Create an invalid criteria error
50 pub fn invalid_criteria(msg: impl Into<String>) -> Self {
51 FilterError::InvalidCriteria(msg.into())
52 }
53
54 /// Create an invalid location error
55 pub fn invalid_location(msg: impl Into<String>) -> Self {
56 FilterError::InvalidLocation(msg.into())
57 }
58
59 /// Create an invalid date range error
60 pub fn invalid_date_range(msg: impl Into<String>) -> Self {
61 FilterError::InvalidDateRange(msg.into())
62 }
63
64 /// Create an invalid pagination error
65 pub fn invalid_pagination(msg: impl Into<String>) -> Self {
66 FilterError::InvalidPagination(msg.into())
67 }
68
69 /// Create a cache operation failed error
70 pub fn cache_operation_failed(operation: &str, details: &str) -> Self {
71 FilterError::Cache(format!("{}: {}", operation, details))
72 }
73
74 /// Create a serialization error
75 pub fn serialization_error(details: &str) -> Self {
76 FilterError::Cache(format!("Serialization failed: {}", details))
77 }
78}