Skip to content
This repository has been archived by the owner on Oct 19, 2024. It is now read-only.

Commit

Permalink
chore(solc): improve remapping errors (#1570)
Browse files Browse the repository at this point in the history
* chore(solc): improve remapping errors

* fix: update error names

* chore: rename test
  • Loading branch information
mattsse authored Aug 5, 2022
1 parent ef60f70 commit a4ff90a
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions ethers-solc/src/remappings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<key>=<value>`")]
InvalidRemapping(String),
#[error("remapping key can't be empty, found `{0}`, expected `<key>=<value>`")]
EmptyRemappingKey(String),
#[error("remapping value must be a path, found `{0}`, expected `<key>=<value>`")]
EmptyRemappingValue(String),
}

impl FromStr for Remapping {
type Err = RemappingError;

fn from_str(remapping: &str) -> std::result::Result<Self, Self::Err> {
let (name, path) = remapping.split_once('=').ok_or(RemappingError::NoPrefix)?;
fn from_str(remapping: &str) -> Result<Self, Self::Err> {
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() })
}
Expand Down Expand Up @@ -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(_));
}

// <https://doc.rust-lang.org/rust-by-example/std_misc/fs.html>
Expand Down

0 comments on commit a4ff90a

Please sign in to comment.