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
use std::convert::From;
use std::error::Error;
use std::io;
macro_rules! impl_display {
($enum:ident, {$($variant:pat => $fmt_string:expr),+$(,)* }) => {
impl ::std::fmt::Display for $enum {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
use self::$enum::*;
match &self {
$(
$variant => write!(f, "{}", $fmt_string),
)+
}
}
}
};
}
#[derive(Debug)]
pub enum FontLoadingError {
UnknownFormat,
NoSuchFontInCollection,
Parse,
NoFilesystem,
Io(io::Error),
}
impl Error for FontLoadingError {}
impl_display! { FontLoadingError, {
UnknownFormat => "unknown format",
NoSuchFontInCollection => "no such font in the collection",
Parse => "parse error",
NoFilesystem => "no filesystem present",
Io(e) => format!("I/O error: {}", e),
}
}
impl From<io::Error> for FontLoadingError {
fn from(error: io::Error) -> FontLoadingError {
FontLoadingError::Io(error)
}
}
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum GlyphLoadingError {
NoSuchGlyph,
PlatformError,
}
impl Error for GlyphLoadingError {}
impl_display! { GlyphLoadingError, {
NoSuchGlyph => "no such glyph",
PlatformError => "platform error",
}
}
#[cfg(target_family = "windows")]
impl From<winapi::um::winnt::HRESULT> for GlyphLoadingError {
fn from(_err: winapi::um::winnt::HRESULT) -> GlyphLoadingError {
GlyphLoadingError::PlatformError
}
}
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum SelectionError {
NotFound,
CannotAccessSource,
}
impl Error for SelectionError {}
impl_display! { SelectionError, {
NotFound => "no font found",
CannotAccessSource => "failed to access source",
}
}