pub enum AppErrorKind {
Show 23 variants
NotFound,
Validation,
Conflict,
Unauthorized,
Forbidden,
NotImplemented,
Internal,
BadRequest,
TelegramAuth,
InvalidJwt,
Database,
Service,
Config,
Turnkey,
Timeout,
Network,
RateLimited,
DependencyUnavailable,
Serialization,
Deserialization,
ExternalApi,
Queue,
Cache,
}
Expand description
Canonical application error taxonomy.
Keep it small, stable, and framework-agnostic. Each variant has a clear, documented meaning and a predictable mapping to an HTTP status code.
Variants§
NotFound
Resource does not exist or is not visible to the caller.
Maps to 404 Not Found.
Validation
Input failed validation (shape, constraints, business rules).
Prefer this over BadRequest
when you validate structured input.
Maps to 422 Unprocessable Entity.
Conflict
State conflict with an existing resource or concurrent update.
Typical cases: unique key violation, version mismatch (ETag). Maps to 409 Conflict.
Authentication required or failed (missing/invalid credentials).
Maps to 401 Unauthorized.
Forbidden
Authenticated but not allowed to perform the operation.
Maps to 403 Forbidden.
NotImplemented
Operation is not implemented or not supported by this deployment.
Maps to 501 Not Implemented.
Internal
Unexpected server-side failure not captured by more specific kinds.
Use sparingly; prefer a more precise category when possible. Maps to 500 Internal Server Error.
BadRequest
Malformed request or missing required parameters.
Prefer Validation
for structured input with field-level issues.
Maps to 400 Bad Request.
TelegramAuth
Telegram authentication flow failed (signature, timestamp, or payload).
Treated as an authentication failure. Maps to 401 Unauthorized.
InvalidJwt
Provided JWT is invalid (expired, malformed, wrong signature/claims).
Treated as an authentication failure. Maps to 401 Unauthorized.
Database
Database-related failure (query, connection, migration, etc.).
Keep driver-specific details out of the public contract. Maps to 500 Internal Server Error.
Service
Generic service-layer failure (business logic or internal orchestration).
Use when no more specific category applies. Maps to 500 Internal Server Error.
Config
Configuration error (missing/invalid environment or runtime config).
Maps to 500 Internal Server Error.
Turnkey
Failure in the Turnkey subsystem/integration.
Maps to 500 Internal Server Error.
Timeout
Operation did not complete within the allotted time.
Typically returned by timeouts around I/O or remote calls. Maps to 504 Gateway Timeout.
Network
Network-level error (DNS, connect, TLS, request build).
For upstream HTTP status failures use ExternalApi
instead.
Maps to 503 Service Unavailable.
RateLimited
Client exceeded rate limits or quota.
Maps to 429 Too Many Requests.
External dependency is unavailable or degraded.
Examples: cache down, message broker unreachable, third-party outage. Maps to 503 Service Unavailable.
Serialization
Failed to serialize data (encode).
Maps to 500 Internal Server Error.
Deserialization
Failed to deserialize data (decode).
Maps to 500 Internal Server Error.
ExternalApi
Upstream API returned an error or the call failed at protocol level.
Use Network
for connect/build failures; use this for HTTP status
errors. Maps to 500 Internal Server Error by default.
Queue
Queue processing failure (publish/consume/ack).
Maps to 500 Internal Server Error.
Cache
Cache subsystem failure (read/write/encoding).
Maps to 500 Internal Server Error.
Implementations§
Source§impl AppErrorKind
impl AppErrorKind
Sourcepub fn http_status(&self) -> u16
pub fn http_status(&self) -> u16
Framework-agnostic mapping to an HTTP status code (u16
).
This mapping is intentionally conservative and stable. It should not leak environment-specific details (e.g. DB driver error codes or HTTP library errors).
Trait Implementations§
Source§impl Clone for AppErrorKind
impl Clone for AppErrorKind
Source§fn clone(&self) -> AppErrorKind
fn clone(&self) -> AppErrorKind
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for AppErrorKind
impl Debug for AppErrorKind
Source§impl Display for AppErrorKind
impl Display for AppErrorKind
Source§impl Error for AppErrorKind
impl Error for AppErrorKind
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<AppErrorKind> for AppCode
impl From<AppErrorKind> for AppCode
Source§fn from(kind: AppErrorKind) -> Self
fn from(kind: AppErrorKind) -> Self
Map internal taxonomy (AppErrorKind
) to public machine code
(AppCode
).
The mapping is 1:1 today and intentionally conservative.