use biscuit_auth::error::Token as TokenError;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("invalid {field}: {reason}")]
InvalidInput {
field: &'static str,
reason: &'static str,
},
#[error("invalid token: {0}")]
InvalidToken(#[source] TokenError),
#[error("token revoked: {0}")]
Revoked(String),
#[error("access denied: {0}")]
Denied(#[source] TokenError),
#[error("token evaluation timed out")]
Overloaded,
#[error("datalog error: {0}")]
Datalog(#[source] TokenError),
}
impl Error {
pub fn kind(&self) -> &'static str {
match self {
Self::InvalidInput { .. } => "invalid_input",
Self::InvalidToken(_) => "invalid_token",
Self::Revoked(_) => "revoked",
Self::Denied(_) => "denied",
Self::Overloaded => "overloaded",
Self::Datalog(_) => "datalog",
}
}
pub(crate) fn invalid(field: &'static str, reason: &'static str) -> Self {
Self::InvalidInput { field, reason }
}
}