@@ -11,6 +11,8 @@ pub mod trimexports;
1111pub mod verifyexports;
1212pub mod verifyimports;
1313
14+ use std:: { fmt, error} ;
15+
1416#[ derive( Eq , PartialEq , Debug ) ]
1517pub 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) ]
3963mod 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