1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum GatewayError {
8 #[error("Configuration error: {0}")]
10 Config(String),
11
12 #[error("Failed to load schema: {0}")]
14 Schema(String),
15
16 #[error("Failed to load policy: {0}")]
18 Policy(String),
19
20 #[error("Database error: {0}")]
22 Database(String),
23
24 #[error("Authentication failed: {0}")]
26 Auth(String),
27
28 #[error("Access denied: {0}")]
30 AccessDenied(String),
31
32 #[error("Invalid query: {0}")]
34 InvalidQuery(String),
35
36 #[error("Internal error: {0}")]
38 Internal(#[from] anyhow::Error),
39}
40
41impl GatewayError {
42 pub fn status_code(&self) -> u16 {
44 match self {
45 Self::Config(_) => 500,
46 Self::Schema(_) => 500,
47 Self::Policy(_) => 500,
48 Self::Database(_) => 503,
49 Self::Auth(_) => 401,
50 Self::AccessDenied(_) => 403,
51 Self::InvalidQuery(_) => 400,
52 Self::Internal(_) => 500,
53 }
54 }
55}