use gotham_restful_derive::ResourceError; /** This is an error type that always yields a _403 Forbidden_ response. This type is best used in combination with [`AuthSuccess`] or [`AuthResult`]. [`AuthSuccess`]: type.AuthSuccess.html [`AuthResult`]: type.AuthResult.html */ #[derive(Debug, Clone, Copy, ResourceError)] pub enum AuthError { #[status(FORBIDDEN)] #[display("Forbidden")] Forbidden } /** This return type can be used to map another `ResourceResult` that can only be returned if the client is authenticated. Otherwise, an empty _403 Forbidden_ response will be issued. Use can look something like this (assuming the `auth` feature is enabled): ```rust # #[macro_use] extern crate gotham_restful_derive; # #[cfg(feature = "auth")] # mod auth_feature_enabled { # use gotham::state::State; # use gotham_restful::*; # use serde::Deserialize; # # #[derive(Resource)] # #[resource(read_all)] # struct MyResource; # # #[derive(Clone, Deserialize)] # struct MyAuthData { exp : u64 } # #[read_all(MyResource)] fn read_all(auth : AuthStatus) -> AuthSuccess { let auth_data = match auth { AuthStatus::Authenticated(data) => data, _ => return Err(Forbidden) }; // do something Ok(NoContent::default()) } # } ``` */ pub type AuthSuccess = Result; /** This is an error type that either yields a _403 Forbidden_ respone if produced from an authentication error, or delegates to another error type. This type is best used with [`AuthResult`]. [`AuthResult`]: type.AuthResult.html */ #[derive(Debug, ResourceError)] pub enum AuthErrorOrOther { #[status(FORBIDDEN)] #[display("Forbidden")] Forbidden, #[display("{0}")] Other(#[from] E) } impl From for AuthErrorOrOther { fn from(err : AuthError) -> Self { match err { AuthError::Forbidden => Self::Forbidden } } } /** This return type can be used to map another `ResourceResult` that can only be returned if the client is authenticated. Otherwise, an empty _403 Forbidden_ response will be issued. Use can look something like this (assuming the `auth` feature is enabled): ``` # #[macro_use] extern crate gotham_restful_derive; # #[cfg(feature = "auth")] # mod auth_feature_enabled { # use gotham::state::State; # use gotham_restful::*; # use serde::Deserialize; # use std::io; # # #[derive(Resource)] # #[resource(read_all)] # struct MyResource; # # #[derive(Clone, Deserialize)] # struct MyAuthData { exp : u64 } # #[read_all(MyResource)] fn read_all(auth : AuthStatus) -> AuthResult { let auth_data = match auth { AuthStatus::Authenticated(data) => data, _ => Err(Forbidden)? }; // do something Ok(NoContent::default().into()) } # } */ pub type AuthResult = Result>;