From a4ff90a94af3be332348b63d9c94f5b3707303b7 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Sat, 6 Aug 2022 00:13:54 +0200 Subject: [PATCH] chore(solc): improve remapping errors (#1570) * chore(solc): improve remapping errors * fix: update error names * chore: rename test --- ethers-solc/src/remappings.rs | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/ethers-solc/src/remappings.rs b/ethers-solc/src/remappings.rs index cbeea7b0..0120e452 100644 --- a/ethers-solc/src/remappings.rs +++ b/ethers-solc/src/remappings.rs @@ -67,22 +67,26 @@ impl Remapping { #[derive(thiserror::Error, Debug, PartialEq, Eq, PartialOrd)] pub enum RemappingError { - #[error("no prefix found")] - NoPrefix, - #[error("no target found")] - NoTarget, + #[error("invalid remapping format, found `{0}`, expected `=`")] + InvalidRemapping(String), + #[error("remapping key can't be empty, found `{0}`, expected `=`")] + EmptyRemappingKey(String), + #[error("remapping value must be a path, found `{0}`, expected `=`")] + EmptyRemappingValue(String), } impl FromStr for Remapping { type Err = RemappingError; - fn from_str(remapping: &str) -> std::result::Result { - let (name, path) = remapping.split_once('=').ok_or(RemappingError::NoPrefix)?; + fn from_str(remapping: &str) -> Result { + let (name, path) = remapping + .split_once('=') + .ok_or_else(|| RemappingError::InvalidRemapping(remapping.to_string()))?; if name.trim().is_empty() { - return Err(RemappingError::NoPrefix) + return Err(RemappingError::EmptyRemappingKey(remapping.to_string())) } if path.trim().is_empty() { - return Err(RemappingError::NoTarget) + return Err(RemappingError::EmptyRemappingValue(remapping.to_string())) } Ok(Remapping { name: name.to_string(), path: path.to_string() }) } @@ -743,17 +747,17 @@ mod tests { } #[test] - fn serde() { + fn remapping_errors() { let remapping = "oz=../b/c/d"; let remapping = Remapping::from_str(remapping).unwrap(); assert_eq!(remapping.name, "oz".to_string()); assert_eq!(remapping.path, "../b/c/d".to_string()); let err = Remapping::from_str("").unwrap_err(); - assert_eq!(err, RemappingError::NoPrefix); + matches!(err, RemappingError::InvalidRemapping(_)); let err = Remapping::from_str("oz=").unwrap_err(); - assert_eq!(err, RemappingError::NoTarget); + matches!(err, RemappingError::EmptyRemappingValue(_)); } //