1pub mod join_room;
2pub use join_room::join_room;
3pub mod login;
4pub use login::login;
5pub mod send_message;
6pub use send_message::send_message;
7pub mod verify_in_room;
8pub use verify_in_room::verify_in_room;
9pub mod verify_token;
10pub use verify_token::verify_token;
11pub mod mock_server;
12
13use serde::Deserialize;
14use thiserror::Error;
15
16use crate::config::ConfigError;
17
18#[derive(Error, Debug)]
19pub enum ApiError {
20 #[error("HTTP request failed: {0}")]
21 Reqwest(#[from] reqwest::Error),
22 #[error("JSON serialization error: {0}")]
23 SerdeJson(#[from] serde_json::Error),
24 #[error("Config error: {0}")]
25 Config(#[from] ConfigError),
26 #[error("Missing password in configuration")]
27 MissingPassword,
28 #[error("Missing token in configuration")]
29 MissingToken,
30 #[error("Login failed with status: {0}")]
31 LoginFailed(u16),
32 #[error("Join room failed with status: {0}")]
33 JoinRoomFailed(u16),
34 #[error("HTTP Error")]
35 HttpError { source: reqwest::Error, url: String },
36 #[error("Matrix API Error")]
37 MatrixApiError {
38 status_code: reqwest::StatusCode,
39 error_message: String,
40 },
41 #[error("Cannot generate example config file when the config file already exists")]
42 ConfigAlreadyExists,
43}
44
45#[derive(Deserialize, Debug)]
46#[allow(dead_code)]
47struct MatrixErrorResponseBody {
48 errcode: String,
49 error: String,
50 retry_after_ms: Option<u64>,
51}