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
extern crate sdl2;
extern crate sdl2_image;
extern crate sdl2_mixer;
extern crate sdl2_ttf;
extern crate rand;
extern crate rustc_serialize;
extern crate toml;
extern crate zip;
pub mod audio;
pub mod conf;
mod context;
pub mod filesystem;
pub mod game;
pub mod graphics;
pub mod timer;
mod util;
pub use game::Game;
pub use context::Context;
#[derive(Debug)]
pub enum GameError {
FilesystemError(String),
ConfigError(String),
ResourceLoadError(String),
ResourceNotFound(String),
RenderError(String),
AudioError(String),
WindowError(sdl2::video::WindowBuildError),
IOError(std::io::Error),
FontError(String),
VideoError(String),
UnknownError(String),
}
pub type GameResult<T> = Result<T, GameError>;
fn warn(err: GameError) -> GameResult<()> {
println!("WARNING: Encountered error: {:?}", err);
Ok(())
}
impl From<String> for GameError {
fn from(s: String) -> GameError {
GameError::UnknownError(s)
}
}
impl From<sdl2::video::WindowBuildError> for GameError {
fn from(s: sdl2::video::WindowBuildError) -> GameError {
GameError::WindowError(s)
}
}
impl From<sdl2::IntegerOrSdlError> for GameError {
fn from(e: sdl2::IntegerOrSdlError) -> GameError {
match e {
sdl2::IntegerOrSdlError::IntegerOverflows(s, i) => {
let message = format!("Integer overflow: {}, str {}", i, s);
GameError::UnknownError(message)
}
sdl2::IntegerOrSdlError::SdlError(s) => GameError::UnknownError(s),
}
}
}
impl From<sdl2::filesystem::PrefPathError> for GameError {
fn from(e: sdl2::filesystem::PrefPathError) -> GameError {
let msg = match e {
sdl2::filesystem::PrefPathError::InvalidOrganizationName(e) => format!("Invalid organization name, {}", e),
sdl2::filesystem::PrefPathError::InvalidApplicationName(e) => format!("Invalid application name, {}", e),
sdl2::filesystem::PrefPathError::SdlError(e) =>
e
};
GameError::ConfigError(msg)
}
}
impl From<sdl2::render::TextureValueError> for GameError {
fn from(e: sdl2::render::TextureValueError) -> GameError {
let msg = format!("{}", e);
GameError::ResourceLoadError(msg)
}
}
impl From<sdl2_ttf::FontError> for GameError {
fn from(e: sdl2_ttf::FontError) -> GameError {
let msg = format!("{}", e);
GameError::ResourceLoadError(msg)
}
}
impl From<std::io::Error> for GameError {
fn from(e: std::io::Error) -> GameError {
GameError::IOError(e)
}
}
impl From<toml::DecodeError> for GameError {
fn from(e: toml::DecodeError) -> GameError {
let errstr = format!("{}", e);
GameError::ConfigError(errstr)
}
}