Skip to main content

fraiseql_server/files/
error.rs

1//! Error types for file operations
2
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum FileError {
7    #[error("File too large: {size} bytes (max: {max} bytes)")]
8    TooLarge { size: usize, max: usize },
9
10    #[error("File type not allowed: {got} (allowed: {allowed:?})")]
11    InvalidType {
12        got:     String,
13        allowed: Vec<String>,
14    },
15
16    #[error("MIME type mismatch: declared {declared}, detected {detected}")]
17    MimeMismatch { declared: String, detected: String },
18
19    #[error("No file provided")]
20    MissingFile,
21
22    #[error("Invalid filename: {reason}")]
23    InvalidFilename { reason: String },
24
25    #[error("Invalid file content: {message}")]
26    InvalidContent { message: String },
27
28    #[error("Malware detected: {threat_name}")]
29    MalwareDetected { threat_name: String },
30
31    #[error("Storage backend not configured: {backend}")]
32    StorageNotConfigured { backend: String },
33}
34
35#[derive(Debug, Error)]
36pub enum StorageError {
37    #[error("File not found: {key}")]
38    NotFound { key: String },
39
40    #[error("Access denied: {key}")]
41    AccessDenied { key: String },
42
43    #[error("Upload failed: {message}")]
44    UploadFailed { message: String },
45
46    #[error("Download failed: {message}")]
47    DownloadFailed { message: String },
48
49    #[error("Configuration error: {message}")]
50    Configuration { message: String },
51
52    #[error("Provider error: {message}")]
53    Provider { message: String },
54}
55
56#[derive(Debug, Error)]
57pub enum ProcessingError {
58    #[error("Failed to load image: {message}")]
59    LoadFailed { message: String },
60
61    #[error("Failed to resize image: {message}")]
62    ResizeFailed { message: String },
63
64    #[error("Failed to encode image: {message}")]
65    EncodeFailed { message: String },
66
67    #[error("Invalid configuration: {message}")]
68    InvalidConfig { message: String },
69}
70
71#[derive(Debug, Error)]
72pub enum ScanError {
73    #[error("Scan timeout")]
74    Timeout,
75
76    #[error("Scanner service unavailable")]
77    ServiceUnavailable,
78
79    #[error("Invalid scanner response: {message}")]
80    InvalidResponse { message: String },
81}