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 fn message<S: Display>(message: S) -> Self {
40 Self::Message(message.to_string())
41 }
42}
43
44impl From<RequestError> for AidokuError {
45 fn from(value: RequestError) -> Self {
46 Self::RequestError(value)
47 }
48}
49
50impl From<HtmlError> for AidokuError {
51 fn from(error: HtmlError) -> AidokuError {
52 AidokuError::HtmlError(error)
53 }
54}
55
56impl From<JsError> for AidokuError {
57 fn from(error: JsError) -> AidokuError {
58 AidokuError::JsError(error)
59 }
60}
61
62impl From<CanvasError> for AidokuError {
63 fn from(error: CanvasError) -> AidokuError {
64 AidokuError::CanvasError(error)
65 }
66}
67
68impl From<Utf8Error> for AidokuError {
69 fn from(error: Utf8Error) -> AidokuError {
70 AidokuError::Utf8Error(error)
71 }
72}
73
74#[cfg(feature = "json")]
75impl From<serde_json::Error> for AidokuError {
76 fn from(error: serde_json::Error) -> AidokuError {
77 AidokuError::JsonParseError(Rc::new(error))
78 }
79}