duster/src/renderer/errors.rs

81 lines
2.3 KiB
Rust
Raw Normal View History

use crate::renderer::walkable::ContextElement;
2020-04-11 18:25:48 -04:00
use std::error;
use std::fmt;
pub enum RenderError<'a> {
Generic(String),
/// For when walking is absolutely impossible
CantWalk {
segment: String,
elem: &'a dyn ContextElement,
},
/// For when walking fails (example, a missing key on a map)
WontWalk {
segment: String,
elem: &'a dyn ContextElement,
},
/// Attempting to render and unrenderable type (for example, an object without any filters)
CantRender {
elem: &'a dyn ContextElement,
},
2020-04-11 18:25:48 -04:00
}
#[derive(Clone)]
pub struct CompileError {
pub message: String,
}
impl fmt::Display for RenderError<'_> {
2020-04-11 18:25:48 -04:00
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
RenderError::Generic(msg) => write!(f, "{}", msg),
RenderError::CantWalk { segment, elem } => {
write!(f, "Tried to walk to {} from {:?}", segment, elem)
}
RenderError::WontWalk { segment, elem } => {
write!(f, "Failed to walk to {} from {:?}", segment, elem)
}
RenderError::CantRender { elem } => write!(f, "Cant render {:?}", elem),
}
2020-04-11 18:25:48 -04:00
}
}
impl fmt::Debug for RenderError<'_> {
2020-04-11 18:25:48 -04:00
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
RenderError::Generic(msg) => write!(f, "{}", msg),
RenderError::CantWalk { segment, elem } => {
write!(f, "Tried to walk to {} from {:?}", segment, elem)
}
RenderError::WontWalk { segment, elem } => {
write!(f, "Failed to walk to {} from {:?}", segment, elem)
}
RenderError::CantRender { elem } => write!(f, "Cant render {:?}", elem),
}
2020-04-11 18:25:48 -04:00
}
}
impl error::Error for RenderError<'_> {
2020-04-11 18:25:48 -04:00
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
None
}
}
impl fmt::Display for CompileError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2020-04-12 21:14:21 -04:00
write!(f, "Error compiling: {}", self.message)
2020-04-11 18:25:48 -04:00
}
}
impl fmt::Debug for CompileError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2020-04-12 21:14:21 -04:00
write!(f, "Error compiling: {}", self.message)
2020-04-11 18:25:48 -04:00
}
}
impl error::Error for CompileError {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
None
}
}