1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#[cfg(not(target_arch="wasm32"))]
extern crate image;
#[cfg(feature="serde_json")]
extern crate serde_json;
#[cfg(all(not(target_arch="wasm32"), feature="rodio"))]
extern crate rodio;
use graphics::{AtlasError, ImageError};
#[cfg(feature="rusttype")] use rusttype::Error as FontError;
#[cfg(feature="serde_json")] use serde_json::Error as SerdeError;
#[cfg(feature="sounds")] use sound::SoundError;
use std::{
fmt,
io::Error as IOError,
error::Error
};
#[derive(Debug)]
pub enum QuicksilverError {
AtlasError(AtlasError),
ImageError(ImageError),
#[cfg(feature="sounds")] SoundError(SoundError),
IOError(IOError),
#[cfg(feature="serde_json")] SerdeError(SerdeError),
#[cfg(feature="rusttype")] FontError(FontError)
}
impl fmt::Display for QuicksilverError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.description())
}
}
impl Error for QuicksilverError {
fn description(&self) -> &str {
match self {
&QuicksilverError::AtlasError(ref err) => err.description(),
&QuicksilverError::ImageError(ref err) => err.description(),
&QuicksilverError::SoundError(ref err) => err.description(),
&QuicksilverError::IOError(ref err) => err.description(),
&QuicksilverError::SerdeError(ref err) => err.description(),
&QuicksilverError::FontError(ref err) => err.description()
}
}
fn cause(&self) -> Option<&Error> {
match self {
&QuicksilverError::AtlasError(ref err) => Some(err),
&QuicksilverError::ImageError(ref err) => Some(err),
&QuicksilverError::SoundError(ref err) => Some(err),
&QuicksilverError::IOError(ref err) => Some(err),
&QuicksilverError::SerdeError(ref err) => Some(err),
&QuicksilverError::FontError(ref err) => Some(err)
}
}
}
#[doc(hidden)]
impl From<ImageError> for QuicksilverError {
fn from(err: ImageError) -> QuicksilverError {
QuicksilverError::ImageError(err)
}
}
#[doc(hidden)]
#[cfg(feature="sounds")]
impl From<SoundError> for QuicksilverError {
fn from(err: SoundError) -> QuicksilverError {
QuicksilverError::SoundError(err)
}
}
#[doc(hidden)]
impl From<AtlasError> for QuicksilverError {
fn from(err: AtlasError) -> QuicksilverError {
QuicksilverError::AtlasError(err)
}
}
impl From<IOError> for QuicksilverError {
fn from(err: IOError) -> QuicksilverError {
QuicksilverError::IOError(err)
}
}
#[cfg(feature="serde_json")]
impl From<SerdeError> for QuicksilverError {
fn from(err: SerdeError) -> QuicksilverError {
QuicksilverError::SerdeError(err)
}
}
#[doc(hidden)]
#[cfg(not(target_arch="wasm32"))]
impl From<image::ImageError> for QuicksilverError {
fn from(img: image::ImageError) -> QuicksilverError {
let image_error: ImageError = img.into();
image_error.into()
}
}
#[doc(hidden)]
#[cfg(all(feature="sounds", not(target_arch="wasm32")))]
impl From<rodio::decoder::DecoderError> for QuicksilverError {
fn from(snd: rodio::decoder::DecoderError) -> QuicksilverError {
let sound_error: SoundError = snd.into();
sound_error.into()
}
}
#[doc(hidden)]
#[cfg(feature="rusttype")]
impl From<FontError> for QuicksilverError {
fn from(fnt: FontError) -> QuicksilverError {
QuicksilverError::FontError(fnt)
}
}