tmc_testmycode_client/
error.rs

1//! The client error type.
2
3use oauth2::HttpClientError;
4use reqwest::{Method, StatusCode};
5use thiserror::Error;
6use tmc_langs_util::{FileError, JsonError};
7use url::Url;
8
9type TokenError = oauth2::RequestTokenError<
10    HttpClientError<oauth2::reqwest::Error>,
11    oauth2::StandardErrorResponse<oauth2::basic::BasicErrorResponseType>,
12>;
13
14pub type TestMyCodeClientResult<T> = Result<T, Box<TestMyCodeClientError>>;
15
16/// The main error type for tmc-testmycode-client.
17#[derive(Debug, Error)]
18pub enum TestMyCodeClientError {
19    #[error("HTTP error {status} for {url}: {error}. Obsolete client: {obsolete_client}")]
20    HttpError {
21        url: Url,
22        status: StatusCode,
23        error: String,
24        obsolete_client: bool,
25    },
26    #[error("Connection error trying to {0} {1}")]
27    ConnectionError(Method, Url, #[source] reqwest::Error),
28    #[error("OAuth2 password exchange error")]
29    Token(#[source] TokenError),
30    #[error("Failed to parse as URL: {0}")]
31    UrlParse(String, #[source] url::ParseError),
32    #[error("Failed to write response")]
33    HttpWriteResponse(#[source] reqwest::Error),
34    #[error("Failed to read response")]
35    HttpReadResponse(#[source] reqwest::Error),
36    #[error("Failed to deserialize response from {0} as JSON")]
37    HttpJsonResponse(Url, #[source] JsonError),
38    #[error("Failed to build HTTP client")]
39    HttpClientBuilder(#[source] reqwest::Error),
40
41    #[error("Already authenticated")]
42    AlreadyAuthenticated,
43    #[error("Authentication required")]
44    NotAuthenticated,
45
46    #[error(transparent)]
47    SystemTime(#[from] std::time::SystemTimeError),
48    #[error(transparent)]
49    WalkDir(#[from] walkdir::Error),
50    #[error(transparent)]
51    FileError(#[from] FileError),
52    #[error(transparent)]
53    Plugin(#[from] tmc_langs_plugins::PluginError),
54}