@@ -19,14 +19,29 @@ pub(crate) enum Error {
19
19
NoradWrite ( PathBuf , norad:: Error ) ,
20
20
}
21
21
22
+ fn chained_error_fmt (
23
+ e : & impl std:: error:: Error ,
24
+ f : & mut std:: fmt:: Formatter < ' _ > ,
25
+ ) -> std:: fmt:: Result {
26
+ writeln ! ( f, "{}\n " , e) ?;
27
+ let mut current = e. source ( ) ;
28
+ while let Some ( cause) = current {
29
+ writeln ! ( f, "Caused by:\n \t {}" , cause) ?;
30
+ current = cause. source ( ) ;
31
+ }
32
+ Ok ( ( ) )
33
+ }
34
+
22
35
impl fmt:: Display for Error {
23
36
fn fmt ( & self , f : & mut fmt:: Formatter ) -> std:: result:: Result < ( ) , fmt:: Error > {
24
37
match & self {
25
38
Error :: NoradRead ( p, e) => {
26
- write ! ( f, "norad read error: {}: {}" , p. display( ) , e)
39
+ writeln ! ( f, "norad read error: {}" , p. display( ) ) ?;
40
+ chained_error_fmt ( e, f)
27
41
}
28
42
Error :: NoradWrite ( p, e) => {
29
- write ! ( f, "norad write error: {}: {}" , p. display( ) , e)
43
+ writeln ! ( f, "norad write error: {}" , p. display( ) ) ?;
44
+ chained_error_fmt ( e, f)
30
45
}
31
46
Error :: InvalidPath ( p) => {
32
47
write ! ( f, "invalid path error: {} was not found" , p. display( ) )
0 commit comments