@@ -62,12 +62,18 @@ pub type Result<T> = result::Result<T, Error>;
62
62
/// [`Write`]: ../io/trait.Write.html
63
63
/// [`Seek`]: ../io/trait.Seek.html
64
64
/// [`ErrorKind`]: enum.ErrorKind.html
65
- #[ derive( Debug ) ]
66
65
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
67
66
pub struct Error {
68
67
repr : Repr ,
69
68
}
70
69
70
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
71
+ impl fmt:: Debug for Error {
72
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
73
+ fmt:: Debug :: fmt ( & self . repr , f)
74
+ }
75
+ }
76
+
71
77
enum Repr {
72
78
Os ( i32 ) ,
73
79
Simple ( ErrorKind ) ,
@@ -511,10 +517,12 @@ impl Error {
511
517
impl fmt:: Debug for Repr {
512
518
fn fmt ( & self , fmt : & mut fmt:: Formatter ) -> fmt:: Result {
513
519
match * self {
514
- Repr :: Os ( ref code) =>
515
- fmt. debug_struct ( "Os" ) . field ( "code" , code)
516
- . field ( "message" , & sys:: os:: error_string ( * code) ) . finish ( ) ,
517
- Repr :: Custom ( ref c) => fmt. debug_tuple ( "Custom" ) . field ( c) . finish ( ) ,
520
+ Repr :: Os ( code) =>
521
+ fmt. debug_struct ( "Os" )
522
+ . field ( "code" , & code)
523
+ . field ( "kind" , & sys:: decode_error_kind ( code) )
524
+ . field ( "message" , & sys:: os:: error_string ( code) ) . finish ( ) ,
525
+ Repr :: Custom ( ref c) => fmt:: Debug :: fmt ( & c, fmt) ,
518
526
Repr :: Simple ( kind) => fmt. debug_tuple ( "Kind" ) . field ( & kind) . finish ( ) ,
519
527
}
520
528
}
@@ -559,17 +567,36 @@ fn _assert_error_is_sync_send() {
559
567
560
568
#[ cfg( test) ]
561
569
mod test {
562
- use super :: { Error , ErrorKind } ;
570
+ use super :: { Error , ErrorKind , Repr , Custom } ;
563
571
use error;
564
572
use fmt;
565
573
use sys:: os:: error_string;
574
+ use sys:: decode_error_kind;
566
575
567
576
#[ test]
568
577
fn test_debug_error ( ) {
569
578
let code = 6 ;
570
579
let msg = error_string ( code) ;
571
- let err = Error { repr : super :: Repr :: Os ( code) } ;
572
- let expected = format ! ( "Error {{ repr: Os {{ code: {:?}, message: {:?} }} }}" , code, msg) ;
580
+ let kind = decode_error_kind ( code) ;
581
+ let err = Error {
582
+ repr : Repr :: Custom ( box Custom {
583
+ kind : ErrorKind :: InvalidInput ,
584
+ error : box Error {
585
+ repr : super :: Repr :: Os ( code)
586
+ } ,
587
+ } )
588
+ } ;
589
+ let expected = format ! (
590
+ "Custom {{ \
591
+ kind: InvalidInput, \
592
+ error: Os {{ \
593
+ code: {:?}, \
594
+ kind: {:?}, \
595
+ message: {:?} \
596
+ }} \
597
+ }}",
598
+ code, kind, msg
599
+ ) ;
573
600
assert_eq ! ( format!( "{:?}" , err) , expected) ;
574
601
}
575
602
0 commit comments