@@ -376,9 +376,12 @@ fn test_tuple_struct_basic() {
376376
377377#[ add_meta]
378378#[ derive( n0_error:: Error ) ]
379+ #[ error( from_sources) ]
379380enum TupleEnum {
380381 #[ display( "io failed" ) ]
381382 Io ( #[ error( source, std_err) ] io:: Error ) ,
383+ #[ error( transparent) ]
384+ Transparent ( MyError ) ,
382385}
383386
384387#[ test]
@@ -391,6 +394,18 @@ fn test_tuple_enum_source_and_meta() {
391394 // Std source is the inner io::Error
392395 let src = std:: error:: Error :: source ( & e) . unwrap ( ) ;
393396 assert_eq ! ( src. to_string( ) , "oops" ) ;
397+
398+ let err = e ! ( MyError :: A ) ;
399+ let err = TupleEnum :: from ( err) ;
400+ assert_eq ! ( format!( "{err}" ) , "A failure" ) ;
401+ assert_eq ! ( format!( "{err:?}" ) , "A failure" ) ;
402+ n0_error:: set_backtrace_enabled ( true ) ;
403+ let err = e ! ( MyError :: A ) ;
404+ let err = TupleEnum :: from ( err) ;
405+ assert_eq ! (
406+ format!( "{err:?}" ) ,
407+ "TupleEnum::Transparent (src/tests.rs:404:15)\n Caused by:\n A failure (src/tests.rs:403:15)"
408+ ) ;
394409}
395410
396411// TODO: turn into actual test
@@ -409,7 +424,7 @@ pub fn test_skip_transparent_errors() {
409424 #[ error( std_sources) ]
410425 enum ErrorB {
411426 #[ error( transparent) ]
412- IoTransparent { source : io:: Error } ,
427+ IoTransparent ( io:: Error ) ,
413428 #[ display( "io error" ) ]
414429 Io { source : io:: Error } ,
415430 }
@@ -421,7 +436,7 @@ pub fn test_skip_transparent_errors() {
421436
422437 fn err_b ( transparent : bool ) -> Result < ( ) , ErrorB > {
423438 if transparent {
424- io ( ) . map_err ( |err| e ! ( ErrorB :: IoTransparent , err ) )
439+ io ( ) . map_err ( |err| ErrorB :: IoTransparent ( err , meta ( ) ) )
425440 } else {
426441 io ( ) . map_err ( |err| e ! ( ErrorB :: Io , err) )
427442 }
@@ -433,40 +448,37 @@ pub fn test_skip_transparent_errors() {
433448
434449 let _guard = wait_sequential ( ) ;
435450 set_backtrace_enabled ( false ) ;
436- println ! ( "no bt, transparent" ) ;
451+ println ! ( "#### no bt, transparent" ) ;
437452 println ! ( "{:?}" , err_a( true ) . unwrap_err( ) ) ;
438453 set_backtrace_enabled ( true ) ;
439- println ! ( "bt, transparent" ) ;
454+ println ! ( "#### bt, transparent" ) ;
440455 println ! ( "{:?}" , err_a( true ) . unwrap_err( ) ) ;
441- println ! ( "{:#?}" , err_a ( true ) . unwrap_err ( ) ) ;
456+
442457 set_backtrace_enabled ( false ) ;
443- println ! ( "no bt, not transparent" ) ;
458+ println ! ( "#### no bt, not transparent" ) ;
444459 println ! ( "{:?}" , err_a( false ) . unwrap_err( ) ) ;
460+
445461 set_backtrace_enabled ( true ) ;
446- println ! ( "bt, transparent" ) ;
462+ println ! ( "#### bt, transparent" ) ;
447463 println ! ( "{:?}" , err_a( true ) . unwrap_err( ) ) ;
448- println ! ( "bt, not transparent" ) ;
449- println ! ( "{:?}" , err_a( false ) . unwrap_err( ) ) ;
450- println ! ( "===" ) ;
451- println ! ( "===" ) ;
452- println ! ( "===" ) ;
464+
453465 set_backtrace_enabled ( true ) ;
454- println ! ( "bt, transparent, display alt" ) ;
466+ println ! ( "#### bt, transparent, display alt" ) ;
455467 println ! ( "{:#}" , err_a( true ) . unwrap_err( ) ) ;
456- println ! ( "bt, not transparent, display alt" ) ;
468+ println ! ( "#### bt, not transparent, display alt" ) ;
457469 println ! ( "{:#}" , err_a( false ) . unwrap_err( ) ) ;
458- println ! ( "bt, transparent, display" ) ;
470+ println ! ( "#### bt, transparent, display" ) ;
459471 println ! ( "{}" , err_a( true ) . unwrap_err( ) ) ;
460- println ! ( "bt, not transparent, display" ) ;
472+ println ! ( "#### bt, not transparent, display" ) ;
461473 println ! ( "{}" , err_a( false ) . unwrap_err( ) ) ;
462- println ! ( "===" ) ;
474+
463475 set_backtrace_enabled ( false ) ;
464- println ! ( "no bt, transparent, display alt" ) ;
476+ println ! ( "#### no bt, transparent, display alt" ) ;
465477 println ! ( "{:#}" , err_a( true ) . unwrap_err( ) ) ;
466- println ! ( "no bt, not transparent, display alt" ) ;
478+ println ! ( "#### no bt, not transparent, display alt" ) ;
467479 println ! ( "{:#}" , err_a( false ) . unwrap_err( ) ) ;
468- println ! ( "no bt, transparent, display" ) ;
480+ println ! ( "#### no bt, transparent, display" ) ;
469481 println ! ( "{}" , err_a( true ) . unwrap_err( ) ) ;
470- println ! ( "no bt, not transparent, display" ) ;
482+ println ! ( "#### no bt, not transparent, display" ) ;
471483 println ! ( "{}" , err_a( false ) . unwrap_err( ) ) ;
472484}
0 commit comments