Skip to content

Commit 43685dc

Browse files
committed
Implement Display and Error for ModuleError
1 parent fa86c3e commit 43685dc

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

libchisel/src/lib.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ pub mod trimexports;
1111
pub mod verifyexports;
1212
pub mod verifyimports;
1313

14+
use std::{fmt, error};
15+
1416
#[derive(Eq, PartialEq, Debug)]
1517
pub enum ModuleError {
1618
NotSupported,
@@ -35,10 +37,34 @@ pub trait ModuleValidator {
3537
fn validate(&self, module: &Module) -> Result<bool, ModuleError>;
3638
}
3739

40+
impl fmt::Display for ModuleError {
41+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
42+
write!(f, "{}", match self {
43+
ModuleError::NotSupported => "Method unsupported",
44+
ModuleError::Custom(msg) => msg,
45+
})
46+
}
47+
}
48+
49+
impl error::Error for ModuleError {
50+
fn description(&self) -> &str {
51+
match self {
52+
ModuleError::NotSupported => "Method unsupported",
53+
ModuleError::Custom(msg) => msg,
54+
}
55+
}
56+
57+
fn cause(&self) -> Option<&error::Error> {
58+
None
59+
}
60+
}
61+
3862
#[cfg(test)]
3963
mod tests {
4064
use super::*;
4165

66+
use std::error::Error;
67+
4268
struct SampleModule {}
4369

4470
impl ModuleCreator for SampleModule {
@@ -89,4 +115,26 @@ mod tests {
89115
let result = validator.validate(&Module::default());
90116
assert!(result.is_ok());
91117
}
118+
119+
#[test]
120+
fn fmt_good() {
121+
// Add new tests for each enum variant here as they are implemented.
122+
let fmt_result_unsupported = format!("{}", ModuleError::NotSupported);
123+
assert_eq!("Method unsupported", fmt_result_unsupported);
124+
125+
let fmt_result_custom = format!("{}", ModuleError::Custom("foo".to_string()));
126+
assert_eq!("foo", fmt_result_custom);
127+
}
128+
129+
#[test]
130+
fn error_good() {
131+
// Add new tests for each enum variant here as they are implemented.
132+
let err_unsupported = ModuleError::NotSupported;
133+
let err_description_unsupported = err_unsupported.description();
134+
assert_eq!("Method unsupported", err_description_unsupported);
135+
136+
let err_custom = ModuleError::Custom("bar".to_string());
137+
let err_description_custom = err_custom.description();
138+
assert_eq!("bar", err_description_custom);
139+
}
92140
}

0 commit comments

Comments
 (0)