@@ -11,6 +11,8 @@ pub mod trimexports;
1111pub mod verifyexports;
1212pub mod verifyimports;
1313
14+ use std:: { error, fmt} ;
15+
1416#[ derive( Eq , PartialEq , Debug ) ]
1517pub enum ModuleError {
1618 NotSupported ,
@@ -35,10 +37,38 @@ 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 ! (
43+ f,
44+ "{}" ,
45+ match self {
46+ ModuleError :: NotSupported => "Method unsupported" ,
47+ ModuleError :: Custom ( msg) => msg,
48+ }
49+ )
50+ }
51+ }
52+
53+ impl error:: Error for ModuleError {
54+ fn description ( & self ) -> & str {
55+ match self {
56+ ModuleError :: NotSupported => "Method unsupported" ,
57+ ModuleError :: Custom ( msg) => msg,
58+ }
59+ }
60+
61+ fn cause ( & self ) -> Option < & error:: Error > {
62+ None
63+ }
64+ }
65+
3866#[ cfg( test) ]
3967mod tests {
4068 use super :: * ;
4169
70+ use std:: error:: Error ;
71+
4272 struct SampleModule { }
4373
4474 impl ModuleCreator for SampleModule {
@@ -89,4 +119,26 @@ mod tests {
89119 let result = validator. validate ( & Module :: default ( ) ) ;
90120 assert ! ( result. is_ok( ) ) ;
91121 }
122+
123+ #[ test]
124+ fn fmt_good ( ) {
125+ // Add new tests for each enum variant here as they are implemented.
126+ let fmt_result_unsupported = format ! ( "{}" , ModuleError :: NotSupported ) ;
127+ assert_eq ! ( "Method unsupported" , fmt_result_unsupported) ;
128+
129+ let fmt_result_custom = format ! ( "{}" , ModuleError :: Custom ( "foo" . to_string( ) ) ) ;
130+ assert_eq ! ( "foo" , fmt_result_custom) ;
131+ }
132+
133+ #[ test]
134+ fn error_good ( ) {
135+ // Add new tests for each enum variant here as they are implemented.
136+ let err_unsupported = ModuleError :: NotSupported ;
137+ let err_description_unsupported = err_unsupported. description ( ) ;
138+ assert_eq ! ( "Method unsupported" , err_description_unsupported) ;
139+
140+ let err_custom = ModuleError :: Custom ( "bar" . to_string ( ) ) ;
141+ let err_description_custom = err_custom. description ( ) ;
142+ assert_eq ! ( "bar" , err_description_custom) ;
143+ }
92144}
0 commit comments