Skip to main content

mockserver_client/
error.rs

1use std::fmt;
2
3/// Result type alias using [`Error`].
4pub type Result<T> = std::result::Result<T, Error>;
5
6/// Errors returned by the MockServer client.
7#[derive(Debug)]
8pub enum Error {
9    /// The server returned a verification failure (HTTP 406).
10    VerificationFailure(String),
11    /// The server returned an invalid request error (HTTP 400).
12    InvalidRequest(String),
13    /// An unexpected HTTP status was returned.
14    UnexpectedStatus { status: u16, body: String },
15    /// A network or transport error from reqwest.
16    Transport(reqwest::Error),
17    /// Failed to serialize or deserialize JSON.
18    Json(serde_json::Error),
19}
20
21impl fmt::Display for Error {
22    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23        match self {
24            Error::VerificationFailure(msg) => write!(f, "verification failed: {msg}"),
25            Error::InvalidRequest(msg) => write!(f, "invalid request (400): {msg}"),
26            Error::UnexpectedStatus { status, body } => {
27                write!(f, "unexpected HTTP {status}: {body}")
28            }
29            Error::Transport(e) => write!(f, "transport error: {e}"),
30            Error::Json(e) => write!(f, "JSON error: {e}"),
31        }
32    }
33}
34
35impl std::error::Error for Error {
36    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
37        match self {
38            Error::Transport(e) => Some(e),
39            Error::Json(e) => Some(e),
40            _ => None,
41        }
42    }
43}
44
45impl From<reqwest::Error> for Error {
46    fn from(e: reqwest::Error) -> Self {
47        Error::Transport(e)
48    }
49}
50
51impl From<serde_json::Error> for Error {
52    fn from(e: serde_json::Error) -> Self {
53        Error::Json(e)
54    }
55}