[librsvg] impl std::Error for LoadingError



commit 4fb74d754d93719ba3acdebbb33d1a8c1eed18ce
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Nov 28 14:27:09 2018 -0600

    impl std::Error for LoadingError

 rsvg_internals/src/error.rs | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)
---
diff --git a/rsvg_internals/src/error.rs b/rsvg_internals/src/error.rs
index a4be968c..3b0734ca 100644
--- a/rsvg_internals/src/error.rs
+++ b/rsvg_internals/src/error.rs
@@ -1,4 +1,4 @@
-use std::error;
+use std::error::{self, Error};
 use std::fmt;
 
 use cairo;
@@ -105,7 +105,7 @@ impl From<cairo::Status> for RenderingError {
     }
 }
 
-#[derive(Clone)]
+#[derive(Debug, Clone)]
 pub enum LoadingError {
     // Could not parse data: URL
     BadDataUrl,
@@ -115,6 +115,30 @@ pub enum LoadingError {
     Unknown,
 }
 
+impl error::Error for LoadingError {
+    fn description(&self) -> &str {
+        match *self {
+            LoadingError::BadDataUrl => "invalid data: URL",
+            LoadingError::Cairo(_) => "cairo error",
+            LoadingError::EmptyData => "empty data",
+            LoadingError::Glib(ref e) => e.description(),
+            LoadingError::Unknown => "unknown error",
+        }
+    }
+}
+
+impl fmt::Display for LoadingError {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        match *self {
+            LoadingError::Cairo(status) => write!(f, "cairo error: {:?}", status),
+            LoadingError::BadDataUrl
+            | LoadingError::EmptyData
+            | LoadingError::Glib(_)
+            | LoadingError::Unknown => write!(f, "{}", self.description()),
+        }
+    }
+}
+
 impl From<cairo::Status> for LoadingError {
     fn from(e: cairo::Status) -> LoadingError {
         assert!(e != cairo::Status::Success);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]