fraiseql_server/files/
error.rs1use 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}