1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use crate::client::Resource; use failure::{self, Fail}; #[derive(Debug, Fail)] pub enum Error { #[fail(display = "Error connecting to the database: {}", _0)] ConnectionError(failure::Error), #[fail(display = "Configuration error: {}", _0)] ConfigurationError(failure::Error), #[fail(display = "Timed out")] TimeoutError, #[fail(display = "Unknown error")] Other, #[fail(display = "Unauthorized")] Unauthorized, #[fail(display = "Server sent no response")] EmptyResponse, #[fail(display = "Bad request: {}", _0)] BadRequest(FaunaErrors), #[fail(display = "Not found: {}", _0)] NotFound(FaunaErrors), #[fail(display = "Request data failure: {}", _0)] RequestDataFailure(&'static str), #[fail(display = "Response data failure: {}", _0)] ResponseDataFailure(&'static str), #[fail(display = "Temporary error wrapper for development, original: {}", _0)] TemporaryFailure(String), #[cfg(feature = "sync_client")] #[fail(display = "IO Error: {}", _0)] IoError(failure::Error), } #[derive(Debug, Deserialize, Fail)] #[fail(display = "Errors in the request data: [{:?}]", errors)] pub struct FaunaErrors { pub errors: Vec<FaunaError>, } #[derive(Debug, Deserialize, Fail)] #[fail( display = "{{position={:?},code={},description={}}}", position, code, description )] pub struct FaunaError { pub position: Vec<Resource>, pub code: String, pub description: String, } impl From<native_tls::Error> for Error { fn from(e: native_tls::Error) -> Self { Error::ConnectionError(e.into()) } } impl From<http::uri::InvalidUri> for Error { fn from(e: http::uri::InvalidUri) -> Self { Error::ConfigurationError(e.into()) } } #[cfg(feature = "sync_client")] impl From<std::io::Error> for Error { fn from(e: std::io::Error) -> Self { Error::IoError(e.into()) } }