use thiserror::Error;
use crate::types::CredentialStrategy;
#[derive(Debug, Error)]
pub enum RouteError {
#[error("no route matched: {reason}")]
NoRoute {
reason: String,
},
#[error("upstream unavailable: {reason}")]
UpstreamUnavailable {
reason: String,
},
#[error("router runtime error: {reason}")]
Runtime {
reason: String,
},
}
#[derive(Debug, Error)]
pub enum DialectError {
#[error("unsupported request: {reason}")]
UnsupportedRequest {
reason: String,
},
#[error("upstream mismatch: {reason}")]
UpstreamMismatch {
reason: String,
},
#[error("invalid upstream url: {source}")]
InvalidUrl {
#[from]
source: url::ParseError,
},
}
#[derive(Debug, Error)]
pub enum SignerError {
#[error("missing credentials: {reason}")]
MissingCredentials {
reason: String,
},
#[error("invalid credentials: {reason}")]
InvalidCredentials {
reason: String,
},
#[error("signing failed: {reason}")]
SigningFailed {
reason: String,
},
#[error("credential storage unavailable: {reason}")]
StorageUnavailable {
reason: String,
},
#[error("expired token: {reason}")]
ExpiredToken {
reason: String,
},
#[error("wrong signer strategy: {strategy:?}")]
WrongStrategy {
strategy: CredentialStrategy,
},
}
#[derive(Debug, Error)]
pub enum UpstreamError {
#[error("upstream unauthorized with status {status}")]
Unauthorized {
status: http::StatusCode,
body: Option<bytes::Bytes>,
},
#[error("upstream retryable status {status}")]
Retryable {
status: http::StatusCode,
body: Option<bytes::Bytes>,
},
#[error("upstream failed with status {status}")]
Failed {
status: http::StatusCode,
body: Option<bytes::Bytes>,
},
}
#[derive(Debug, Error)]
pub enum ObservabilityError {
#[error("observability queue full")]
QueueFull,
#[error("observability event dropped: {reason}")]
Dropped {
reason: String,
},
}
#[derive(Debug, Error)]
pub enum RuntimeError {
#[error("invalid plugin manifest: {reason}")]
InvalidManifest {
reason: String,
},
#[error("plugin load failed: {reason}")]
LoadFailed {
reason: String,
},
#[error("plugin instantiation failed: {reason}")]
InstantiateFailed {
reason: String,
},
}