tmc_testmycode_client/
error.rs1use 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#[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}