1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum KlafsError {
6 #[error("Authentication failed: {message}")]
8 AuthenticationFailed { message: String },
9
10 #[error("Account locked: Klafs locks accounts after 3 failed login attempts. Please wait or contact support.")]
12 AccountLocked,
13
14 #[error("Session expired or invalid. Please login again.")]
16 SessionExpired,
17
18 #[error("Invalid PIN provided")]
20 InvalidPin,
21
22 #[error("Sauna with ID {sauna_id} not found")]
24 SaunaNotFound { sauna_id: String },
25
26 #[error("Sauna is not connected. Check your sauna's network connection.")]
28 SaunaNotConnected,
29
30 #[error("Invalid parameter: {message}")]
32 InvalidParameter { message: String },
33
34 #[error("API error: {status_code} - {message}")]
36 ApiError { status_code: u16, message: String },
37
38 #[error("Network error: {0}")]
40 Network(#[from] reqwest::Error),
41
42 #[error("Failed to parse response: {0}")]
44 Parse(#[from] serde_json::Error),
45
46 #[error("Failed to extract verification token from response")]
48 VerificationTokenNotFound,
49
50 #[error("Unexpected response: {message}")]
52 UnexpectedResponse { message: String },
53}
54
55pub type Result<T> = std::result::Result<T, KlafsError>;