From 6342f86c109ea84396ea9926358a2c4584f38a53 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Thu, 14 Feb 2019 20:02:07 -0800 Subject: [PATCH] [errors] Fix infinite recursion in fmt::Display for Error (#111) --- src/error.rs | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/error.rs b/src/error.rs index 8185d57..4a02b8d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -57,24 +57,18 @@ impl<'a, T> From> for Error { impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "{} error: {}", - match self { - Error::Canonicalization(_, _) => "Path", - Error::Clap(_) => "Argument", - Error::Glob(_) => "Globset", - Error::Io(_) => "I/O", - Error::Notify(_) => "Notify", - Error::PoisonedLock => "Internal", - }, - match self { - Error::Canonicalization(path, err) => { - format!("couldn't canonicalize '{}':\n{}", path, err) - } - err => format!("{}", err), + let (error_type, error) = match self { + Error::Canonicalization(path, err) => { + ("Path", format!("couldn't canonicalize '{}':\n{}", path, err)) } - ) + Error::Clap(err) => ("Argument", err.to_string()), + Error::Glob(err) => ("Globset", err.to_string()), + Error::Io(err) => ("I/O", err.to_string()), + Error::Notify(err) => ("Notify", err.to_string()), + Error::PoisonedLock => ("Internal", "poisoned lock".to_string()), + }; + + write!(f, "{} error: {}", error_type, error) } }