1use super::{html::HtmlError, js::JsError, net::RequestError};
3#[cfg(feature = "json")]
4use crate::alloc::rc::Rc;
5use crate::{
6 alloc::{String, string::ToString},
7 imports::canvas::CanvasError,
8};
9use core::{fmt::Display, str::Utf8Error};
10
11pub type Result<T> = core::result::Result<T, AidokuError>;
12
13#[derive(Debug, Clone)]
15pub enum AidokuError {
16 Unimplemented,
18 Message(String),
20 RequestError(RequestError),
22 HtmlError(HtmlError),
24 JsError(JsError),
26 CanvasError(CanvasError),
28 Utf8Error(Utf8Error),
30 #[cfg(feature = "json")]
31 JsonParseError(Rc<serde_json::Error>),
33 DeserializeError,
35}
36
37impl AidokuError {
38 pub const fn error_code(&self) -> i32 {
39 match self {
40 Self::Unimplemented => -2,
41 Self::RequestError(_) => -3,
42 Self::HtmlError(_) => -4,
43 Self::JsError(_) => -5,
44 Self::CanvasError(_) => -6,
45 Self::Utf8Error(_) => -7,
46 #[cfg(feature = "json")]
47 Self::JsonParseError(_) => -8,
48 Self::DeserializeError => -9,
49 Self::Message(_) => -1,
50 }
51 }
52}
53
54impl AidokuError {
55 pub fn message<S: Display>(message: S) -> Self {
57 Self::Message(message.to_string())
58 }
59}
60
61impl From<RequestError> for AidokuError {
62 fn from(value: RequestError) -> Self {
63 Self::RequestError(value)
64 }
65}
66
67impl From<HtmlError> for AidokuError {
68 fn from(error: HtmlError) -> AidokuError {
69 AidokuError::HtmlError(error)
70 }
71}
72
73impl From<JsError> for AidokuError {
74 fn from(error: JsError) -> AidokuError {
75 AidokuError::JsError(error)
76 }
77}
78
79impl From<CanvasError> for AidokuError {
80 fn from(error: CanvasError) -> AidokuError {
81 AidokuError::CanvasError(error)
82 }
83}
84
85impl From<Utf8Error> for AidokuError {
86 fn from(error: Utf8Error) -> AidokuError {
87 AidokuError::Utf8Error(error)
88 }
89}
90
91#[cfg(feature = "json")]
92impl From<serde_json::Error> for AidokuError {
93 fn from(error: serde_json::Error) -> AidokuError {
94 AidokuError::JsonParseError(Rc::new(error))
95 }
96}