summaryrefslogtreecommitdiffstats
path: root/third_party/rust/viaduct/src/error.rs
blob: a66c3e38fe141d92601a96a4fe54112475891af3 (plain)
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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#[derive(Debug, thiserror::Error)]
pub enum Error {
    #[error("[no-sentry] Illegal characters in request header '{0}'")]
    RequestHeaderError(crate::HeaderName),

    #[error("[no-sentry] Backend error: {0}")]
    BackendError(String),

    #[error("[no-sentry] Network error: {0}")]
    NetworkError(String),

    #[error("The rust-components network backend must be initialized before use!")]
    BackendNotInitialized,

    #[error("Backend already initialized.")]
    SetBackendError,

    /// Note: we return this if the server returns a bad URL with
    /// its response. This *probably* should never happen, but who knows.
    #[error("[no-sentry] URL Parse Error: {0}")]
    UrlError(#[source] url::ParseError),

    #[error("[no-sentry] Validation error: URL does not use TLS protocol.")]
    NonTlsUrl,
}

impl From<url::ParseError> for Error {
    fn from(u: url::ParseError) -> Self {
        Error::UrlError(u)
    }
}

/// This error is returned as the `Err` result from
/// [`Response::require_success`].
///
/// Note that it's not a variant on `Error` to distinguish between errors
/// caused by the network, and errors returned from the server.
#[derive(thiserror::Error, Debug, Clone)]
#[error("Error: {method} {url} returned {status}")]
pub struct UnexpectedStatus {
    pub status: u16,
    pub method: crate::Method,
    pub url: url::Url,
}