summaryrefslogtreecommitdiffstats
path: root/src/fail.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/fail.rs')
-rw-r--r--src/fail.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/fail.rs b/src/fail.rs
index 580aad1..6cf4afe 100644
--- a/src/fail.rs
+++ b/src/fail.rs
@@ -29,6 +29,8 @@ pub enum HError {
PreviewFailed{file: String, backtrace: Backtrace},
#[fail(display = "StalePreviewer for file: {}", file)]
StalePreviewError{file: String},
+ #[fail(display = "Accessed stale value")]
+ StaleError(Backtrace),
#[fail(display = "Failed: {}", error)]
Error{#[cause] error: failure::Error , backtrace: Backtrace},
#[fail(display = "Was None!")]
@@ -120,6 +122,10 @@ impl HError {
pub fn terminal_resized<T>() -> HResult<T> {
Err(HError::TerminalResizedError)
}
+
+ pub fn stale<T>() -> HResult<T> {
+ Err(HError::StaleError(Backtrace::new()))
+ }
}
@@ -138,7 +144,8 @@ pub fn put_log<L: Into<LogEntry>>(log: L) -> HResult<()> {
}
pub trait ErrorLog where Self: Sized {
- fn log(self) {}
+ fn log(self);
+ fn log_and(self) -> Self;
}
impl<T> ErrorLog for HResult<T> {
@@ -148,6 +155,13 @@ impl<T> ErrorLog for HResult<T> {
put_log(&err).ok();
}
}
+
+ fn log_and(self) -> Self {
+ if let Err(err) = &self {
+ put_log(err).ok();
+ }
+ self
+ }
}