1 | // x11-rs: Rust bindings for X11 libraries |
2 | // The X11 libraries are available under the MIT license. |
3 | // These bindings are public domain. |
4 | |
5 | use std::error::Error; |
6 | use std::fmt::{Display, Formatter}; |
7 | |
8 | // |
9 | // OpenError |
10 | |
11 | // |
12 | |
13 | #[derive (Clone, Debug)] |
14 | pub struct OpenError { |
15 | kind: OpenErrorKind, |
16 | detail: String, |
17 | } |
18 | |
19 | impl OpenError { |
20 | pub fn detail(&self) -> &str { |
21 | self.detail.as_ref() |
22 | } |
23 | |
24 | pub fn kind(&self) -> OpenErrorKind { |
25 | self.kind |
26 | } |
27 | |
28 | pub fn new(kind: OpenErrorKind, detail: String) -> OpenError { |
29 | OpenError { kind, detail } |
30 | } |
31 | } |
32 | |
33 | impl Display for OpenError { |
34 | fn fmt(&self, f: &mut Formatter) -> Result<(), ::std::fmt::Error> { |
35 | //try!(f.write_str(self.kind.as_str())); TEST Erle July 2020 (on dev branch) |
36 | f.write_str(self.kind.as_str())?; |
37 | if !self.detail.is_empty() { |
38 | f.write_str(data:" (" )?; |
39 | f.write_str(self.detail.as_ref())?; |
40 | f.write_str(data:")" )?; |
41 | } |
42 | Ok(()) |
43 | } |
44 | } |
45 | |
46 | impl Error for OpenError { |
47 | fn description(&self) -> &str { |
48 | self.kind.as_str() |
49 | } |
50 | } |
51 | |
52 | // |
53 | // OpenErrorKind |
54 | // |
55 | |
56 | #[derive (Clone, Copy, Debug, Eq, Hash, PartialEq)] |
57 | pub enum OpenErrorKind { |
58 | Library, |
59 | Symbol, |
60 | } |
61 | |
62 | impl OpenErrorKind { |
63 | pub fn as_str(self) -> &'static str { |
64 | match self { |
65 | OpenErrorKind::Library => "opening library failed" , |
66 | OpenErrorKind::Symbol => "loading symbol failed" , |
67 | } |
68 | } |
69 | } |
70 | |