diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown index a7da0c7..7672be0 100644 --- a/CHANGELOG.markdown +++ b/CHANGELOG.markdown @@ -7,6 +7,7 @@ - Redesigned window API - Redesigned progress bar API - Redesigned color editor/picker API +- Renderer errors implement std::error::Error ### Removed diff --git a/imgui-gfx-renderer/src/lib.rs b/imgui-gfx-renderer/src/lib.rs index 9c7dc76..e46d1f5 100644 --- a/imgui-gfx-renderer/src/lib.rs +++ b/imgui-gfx-renderer/src/lib.rs @@ -7,6 +7,8 @@ use gfx::traits::FactoryExt; use gfx::{CommandBuffer, Encoder, Factory, IntoIndexBuffer, Rect, Resources, Slice}; use imgui::internal::RawWrapper; use imgui::{DrawCmd, DrawCmdParams, DrawData, DrawIdx, DrawVert, ImString, TextureId, Textures}; +use std::error::Error; +use std::fmt; use std::usize; #[derive(Clone, Debug)] @@ -18,6 +20,32 @@ pub enum RendererError { BadTexture(TextureId), } +impl fmt::Display for RendererError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + use self::RendererError::*; + match *self { + Update(ref e) => write!(f, "{}", e), + Buffer(ref e) => write!(f, "{}", e), + Pipeline(ref e) => write!(f, "{}", e), + Combined(ref e) => write!(f, "{}", e), + BadTexture(ref t) => write!(f, "Bad texture ID: {}", t.id()), + } + } +} + +impl Error for RendererError { + fn source(&self) -> Option<&(dyn Error + 'static)> { + use self::RendererError::*; + match *self { + Update(ref e) => Some(e), + Buffer(ref e) => Some(e), + Pipeline(ref e) => Some(e), + Combined(ref e) => Some(e), + BadTexture(_) => None, + } + } +} + impl From> for RendererError { fn from(e: gfx::UpdateError) -> RendererError { RendererError::Update(e) diff --git a/imgui-glium-renderer/src/lib.rs b/imgui-glium-renderer/src/lib.rs index 5e1cc3f..f4bb5b9 100644 --- a/imgui-glium-renderer/src/lib.rs +++ b/imgui-glium-renderer/src/lib.rs @@ -10,6 +10,7 @@ use glium::{ use imgui::internal::RawWrapper; use imgui::{DrawCmd, DrawCmdParams, DrawData, ImString, TextureId, Textures}; use std::borrow::Cow; +use std::error::Error; use std::fmt; use std::rc::Rc; use std::usize; @@ -24,6 +25,20 @@ pub enum RendererError { BadTexture(TextureId), } +impl Error for RendererError { + fn source(&self) -> Option<&(dyn Error + 'static)> { + use self::RendererError::*; + match *self { + Vertex(ref e) => Some(e), + Index(ref e) => Some(e), + Program(ref e) => Some(e), + Texture(ref e) => Some(e), + Draw(ref e) => Some(e), + BadTexture(_) => None, + } + } +} + impl fmt::Display for RendererError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { use self::RendererError::*;