@@ -474,6 +474,7 @@ fn test_either_enum() -> Result<()> {
474
474
* either. as_mut ( ) . left ( ) . unwrap ( ) = 44 ;
475
475
assert_eq ! ( * either. as_ref( ) . left( ) . unwrap( ) , 44 ) ;
476
476
assert_eq ! ( format!( "{either}" ) , "44" ) ;
477
+ assert_eq ! ( either. right( ) , None ) ;
477
478
478
479
// Right
479
480
either = Either :: Right ( "hello" . to_string ( ) ) ;
@@ -482,6 +483,7 @@ fn test_either_enum() -> Result<()> {
482
483
* either. as_mut ( ) . right ( ) . unwrap ( ) = "world" . to_string ( ) ;
483
484
assert_eq ! ( * either. as_ref( ) . right( ) . unwrap( ) , "world" ) ;
484
485
assert_eq ! ( format!( "{either}" ) , "world" ) ;
486
+ assert_eq ! ( either. left( ) , None ) ;
485
487
486
488
Ok ( ( ) )
487
489
}
@@ -492,8 +494,10 @@ fn test_either_into_lua() -> Result<()> {
492
494
493
495
// Direct conversion
494
496
let mut either = Either :: < i32 , & Table > :: Left ( 42 ) ;
495
- let value = either. into_lua ( & lua) ?;
496
- assert_eq ! ( value, Value :: Integer ( 42 ) ) ;
497
+ assert_eq ! ( either. into_lua( & lua) ?, Value :: Integer ( 42 ) ) ;
498
+ let t = lua. create_table ( ) ?;
499
+ either = Either :: Right ( & t) ;
500
+ assert ! ( matches!( either. into_lua( & lua) ?, Value :: Table ( _) ) ) ;
497
501
498
502
// Push into stack
499
503
let f =
@@ -514,6 +518,19 @@ fn test_either_into_lua() -> Result<()> {
514
518
fn test_either_from_lua ( ) -> Result < ( ) > {
515
519
let lua = Lua :: new ( ) ;
516
520
521
+ // From value
522
+ let mut either = lua. unpack :: < Either < i32 , Table > > ( Value :: Integer ( 42 ) ) ?;
523
+ assert ! ( either. is_left( ) ) ;
524
+ assert_eq ! ( * either. as_ref( ) . left( ) . unwrap( ) , 42 ) ;
525
+ let t = lua. create_table ( ) ?;
526
+ either = lua. unpack :: < Either < i32 , Table > > ( Value :: Table ( t. clone ( ) ) ) ?;
527
+ assert ! ( either. is_right( ) ) ;
528
+ assert_eq ! ( either. as_ref( ) . right( ) . unwrap( ) , & t) ;
529
+ match lua. unpack :: < Either < i32 , Table > > ( Value :: String ( lua. create_string ( "abc" ) ?) ) {
530
+ Err ( Error :: FromLuaConversionError { to, .. } ) => assert_eq ! ( to, "Either<i32, Table>" ) ,
531
+ _ => panic ! ( "expected `Error::FromLuaConversionError`" ) ,
532
+ }
533
+
517
534
// From stack
518
535
let f = lua. create_function ( |_, either : Either < i32 , Table > | Ok ( either) ) ?;
519
536
let either = f. call :: < Either < i32 , Table > > ( 42 ) ?;
0 commit comments