1use std::{
2 error::Error,
3 ffi::NulError,
4 fmt::{self, Display, Formatter},
5 io,
6};
7
8/// Enum representing different types of errors that can occur in the canvas.
9#[derive(Debug)]
10#[non_exhaustive]
11pub enum ErrorKind {
12 /// An unknown error occurred.
13 UnknownError,
14 /// A general error with a custom error message.
15 GeneralError(String),
16 /// An error related to image loading (requires "image-loading" feature).
17 #[cfg(feature = "image-loading")]
18 ImageError(::image::ImageError),
19 /// An I/O error.
20 IoError(io::Error),
21 /// An error occurred while parsing a font.
22 FontParseError,
23 /// No font was found.
24 NoFontFound,
25 /// An error occurred while extracting font information.
26 FontInfoExtractionError,
27 /// The font size is too large for the font atlas.
28 FontSizeTooLargeForAtlas,
29 /// An error occurred while compiling a shader.
30 ShaderCompileError(String),
31 /// An error occurred while linking a shader.
32 ShaderLinkError(String),
33 /// An error related to a render target.
34 RenderTargetError(String),
35 /// The specified image ID was not found.
36 ImageIdNotFound,
37 /// An error occurred while updating an image, as it is out of bounds.
38 ImageUpdateOutOfBounds,
39 /// An error occurred while updating an image with a different format.
40 ImageUpdateWithDifferentFormat,
41 /// The specified image format is not supported.
42 UnsupportedImageFormat,
43 /// The requested operation is not supported (for example screenshot by wgpu renderer).
44 UnsupportedOperation,
45}
46
47impl Display for ErrorKind {
48 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
49 write!(f, "canvas error")
50 }
51}
52
53#[cfg(feature = "image-loading")]
54impl From<::image::ImageError> for ErrorKind {
55 fn from(error: ::image::ImageError) -> Self {
56 Self::ImageError(error)
57 }
58}
59
60impl From<io::Error> for ErrorKind {
61 fn from(error: io::Error) -> Self {
62 Self::IoError(error)
63 }
64}
65
66impl From<NulError> for ErrorKind {
67 fn from(error: NulError) -> Self {
68 Self::GeneralError(error.to_string())
69 }
70}
71
72impl Error for ErrorKind {}
73