diff options
Diffstat (limited to 'src/fail.rs')
-rw-r--r-- | src/fail.rs | 16 |
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 + } } |