aidoku/imports/
error.rs

1//! Error handling for Aidoku source library functions.
2use 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/// An error passed back to the source runner.
14#[derive(Debug, Clone)]
15pub enum AidokuError {
16	/// This feature is unimplemented.
17	Unimplemented,
18	/// Pass a message back to the app.
19	Message(String),
20	/// There was an error making a request.
21	RequestError(RequestError),
22	/// There was an error performing an HTML operation.
23	HtmlError(HtmlError),
24	/// There was an error performing a JavaScript operation.
25	JsError(JsError),
26	/// There was an error handling a canvas operation.
27	CanvasError(CanvasError),
28	/// There was an error handling UTF-8 data.
29	Utf8Error(Utf8Error),
30	#[cfg(feature = "json")]
31	/// JSON parsing error.
32	JsonParseError(Rc<serde_json::Error>),
33	/// Deserialization error.
34	DeserializeError,
35}
36
37impl AidokuError {
38	/// Creates a new message error.
39	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}