Skip to main content

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	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	/// Creates a new message error.
56	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}