diff options
Diffstat (limited to 'src/fail.rs')
-rw-r--r-- | src/fail.rs | 130 |
1 files changed, 90 insertions, 40 deletions
diff --git a/src/fail.rs b/src/fail.rs index 6cf4afe..15a8b2c 100644 --- a/src/fail.rs +++ b/src/fail.rs @@ -1,6 +1,6 @@ use failure; use failure::Fail; -use failure::Backtrace; +//use failure::Backtrace; use termion::event::Key; @@ -11,36 +11,46 @@ use crate::foldview::LogEntry; pub type HResult<T> = Result<T, HError>; -#[derive(Fail, Debug)] +#[derive(Fail, Debug, Clone)] pub enum HError { - #[fail(display = "IO error: {} ", error)] - IoError{#[cause] error: std::io::Error, backtrace: Backtrace}, + #[fail(display = "IO error: {} ", _0)] + IoError(String), #[fail(display = "Mutex failed")] - MutexError(Backtrace), + MutexError, #[fail(display = "Can't lock!")] - TryLockError(Backtrace), + TryLockError, #[fail(display = "Channel failed: {}", error)] ChannelTryRecvError{#[cause] error: std::sync::mpsc::TryRecvError}, #[fail(display = "Channel failed: {}", error)] ChannelRecvError{#[cause] error: std::sync::mpsc::RecvError}, #[fail(display = "Channel failed")] - ChannelSendError(Backtrace), + ChannelSendError, #[fail(display = "Previewer failed on file: {}", file)] - PreviewFailed{file: String, backtrace: Backtrace}, + PreviewFailed{file: String}, #[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}, + StaleError, + #[fail(display = "Failed: {}", _0)] + Error(String), #[fail(display = "Was None!")] - NoneError(Backtrace), + NoneError, #[fail(display = "Not ready yet!")] - WillBeNotReady(Backtrace), + WillBeNotReady, + #[fail(display = "Not ready yet!")] + AsyncNotReadyError, + #[fail(display = "Async is stale!")] + AsyncStaleError, + #[fail(display = "Value has already been taken!")] + AsyncAlreadyTakenError, + #[fail(display = "Async has already been started!")] + AsyncAlreadyStartedError, + #[fail(display = "Async Error: {}", _0)] + AsyncError(String), #[fail(display = "No widget found")] - NoWidgetError(Backtrace), + NoWidgetError, #[fail(display = "Path: {:?} not in this directory: {:?}", path, dir)] - WrongDirectoryError{ path: PathBuf, dir: PathBuf , backtrace: Backtrace}, + WrongDirectoryError{ path: PathBuf, dir: PathBuf}, #[fail(display = "Widget finnished")] PopupFinnished, #[fail(display = "No completions found")] @@ -48,7 +58,7 @@ pub enum HError { #[fail(display = "No more history")] NoHistoryError, #[fail(display = "No core for widget")] - NoWidgetCoreError(Backtrace), + NoWidgetCoreError, #[fail(display = "No header for widget")] NoHeaderError, #[fail(display = "You wanted this!")] @@ -56,11 +66,11 @@ pub enum HError { #[fail(display = "HBox ratio mismatch: {} widgets, ratio is {:?}", wnum, ratio)] HBoxWrongRatioError{ wnum: usize, ratio: Vec<usize> }, #[fail(display = "Got wrong widget: {}! Wanted: {}", got, wanted)] - WrongWidgetError{got: String, wanted: String, backtrace: Backtrace}, + WrongWidgetError{got: String, wanted: String}, #[fail(display = "Strip Prefix Error: {}", error)] - StripPrefixError{#[cause] error: std::path::StripPrefixError, backtrace: Backtrace}, - #[fail(display = "INofify failed: {}", error)] - INotifyError{#[cause] error: notify::Error, backtrace: Backtrace}, + StripPrefixError{#[cause] error: std::path::StripPrefixError}, + #[fail(display = "INofify failed: {}", _0)] + INotifyError(String), #[fail(display = "Tags not loaded yet")] TagsNotLoadedYetError, #[fail(display = "Input cancelled!")] @@ -71,12 +81,20 @@ pub enum HError { WidgetUndefinedKeyError{key: Key}, #[fail(display = "Terminal has been resized!")] TerminalResizedError, + #[fail(display = "Widget has been resized!")] + WidgetResizedError, #[fail(display = "{}", _0)] - Log(String) + Log(String), + #[fail(display = "Metadata already processed")] + MetadataProcessedError, + #[fail(display = "No files to take from widget")] + WidgetNoFilesError, + #[fail(display = "Invalid line in settings file: {}", _0)] + ConfigLineError(String), } impl HError { - pub fn log(log: String) -> HResult<()> { + pub fn log<T>(log: String) -> HResult<T> { Err(HError::Log(log)) } pub fn quit() -> HResult<()> { @@ -86,12 +104,12 @@ impl HError { Err(HError::HBoxWrongRatioError{ wnum: wnum, ratio: ratio }) } pub fn no_widget<T>() -> HResult<T> { - Err(HError::NoWidgetError(Backtrace::new())) + Err(HError::NoWidgetError) } pub fn wrong_widget<T>(got: &str, wanted: &str) -> HResult<T> { Err(HError::WrongWidgetError{ got: got.to_string(), - wanted: wanted.to_string(), - backtrace: Backtrace::new()}) + wanted: wanted.to_string() }) + } pub fn popup_finnished<T>() -> HResult<T> { Err(HError::PopupFinnished) @@ -110,21 +128,53 @@ impl HError { } pub fn wrong_directory<T>(path: PathBuf, dir: PathBuf) -> HResult<T> { Err(HError::WrongDirectoryError{ path: path, - dir: dir, - backtrace: Backtrace::new() }) + dir: dir }) + } pub fn preview_failed<T>(file: &crate::files::File) -> HResult<T> { let name = file.name.clone(); - Err(HError::PreviewFailed{ file: name, - backtrace: Backtrace::new() }) + Err(HError::PreviewFailed{ file: name }) + } pub fn terminal_resized<T>() -> HResult<T> { Err(HError::TerminalResizedError) } + pub fn widget_resized<T>() -> HResult<T> { + Err(HError::WidgetResizedError) + } + pub fn stale<T>() -> HResult<T> { - Err(HError::StaleError(Backtrace::new())) + Err(HError::StaleError) + } + + pub fn config_error<T>(line: String) -> HResult<T> { + Err(HError::ConfigLineError(line)) + } + + pub fn async_not_ready<T>() -> HResult<T> { + Err(HError::AsyncNotReadyError) + } + + pub fn async_taken<T>() -> HResult<T> { + Err(HError::AsyncAlreadyTakenError) + } + + pub fn async_error<T>(error: &HError) -> HResult<T> { + Err(HError::AsyncError(format!("{}", error))) + } + + pub fn async_started<T>() -> HResult<T> { + Err(HError::AsyncAlreadyStartedError) + } + + pub fn metadata_processed<T>() -> HResult<T> { + Err(HError::MetadataProcessedError) + } + + pub fn no_files<T>() -> HResult<T> { + Err(HError::WidgetNoFilesError) } } @@ -177,7 +227,7 @@ impl<T> ErrorLog for HResult<T> { impl From<std::io::Error> for HError { fn from(error: std::io::Error) -> Self { // dbg!(&error); - let err = HError::IoError { error: error, backtrace: Backtrace::new() }; + let err = HError::IoError(format!("{}", error)); put_log(&err).ok(); err } @@ -186,7 +236,7 @@ impl From<std::io::Error> for HError { impl From<failure::Error> for HError { fn from(error: failure::Error) -> Self { // dbg!(&error); - let err = HError::Error { error: error, backtrace: Backtrace::new() }; + let err = HError::Error(format!("{}", error)); put_log(&err).ok(); err } @@ -213,7 +263,7 @@ impl From<std::sync::mpsc::RecvError> for HError { impl<T> From<std::sync::mpsc::SendError<T>> for HError { fn from(error: std::sync::mpsc::SendError<T>) -> Self { dbg!(&error); - let err = HError::ChannelSendError(Backtrace::new()); + let err = HError::ChannelSendError; put_log(&err).ok(); err } @@ -222,25 +272,25 @@ impl<T> From<std::sync::mpsc::SendError<T>> for HError { impl<T> From<std::sync::PoisonError<T>> for HError { fn from(_: std::sync::PoisonError<T>) -> Self { // dbg!("Poisoned Mutex"); - let err = HError::MutexError(Backtrace::new()); + let err = HError::MutexError; put_log(&err).ok(); err } } impl<T> From<std::sync::TryLockError<T>> for HError { - fn from(error: std::sync::TryLockError<T>) -> Self { + fn from(_error: std::sync::TryLockError<T>) -> Self { // dbg!(&error); - let err = HError::TryLockError(Backtrace::new()); + let err = HError::TryLockError; put_log(&err).ok(); err } } impl From<std::option::NoneError> for HError { - fn from(error: std::option::NoneError) -> Self { + fn from(_error: std::option::NoneError) -> Self { //dbg!(&error); - let err = HError::NoneError(Backtrace::new()); + let err = HError::NoneError; //put_log(&err).ok(); err } @@ -249,7 +299,7 @@ impl From<std::option::NoneError> for HError { impl From<std::path::StripPrefixError> for HError { fn from(error: std::path::StripPrefixError) -> Self { // dbg!(&error); - let err = HError::StripPrefixError{error: error, backtrace: Backtrace::new() }; + let err = HError::StripPrefixError{error: error }; put_log(&err).ok(); err } @@ -258,7 +308,7 @@ impl From<std::path::StripPrefixError> for HError { impl From<notify::Error> for HError { fn from(error: notify::Error) -> Self { // dbg!(&error); - let err = HError::INotifyError{error: error, backtrace: Backtrace::new() }; + let err = HError::INotifyError(format!("{}", error)); put_log(&err).ok(); err } |