@@ -474,6 +474,7 @@ fn test_either_enum() -> Result<()> {
474474 * either. as_mut ( ) . left ( ) . unwrap ( ) = 44 ;
475475 assert_eq ! ( * either. as_ref( ) . left( ) . unwrap( ) , 44 ) ;
476476 assert_eq ! ( format!( "{either}" ) , "44" ) ;
477+ assert_eq ! ( either. right( ) , None ) ;
477478
478479 // Right
479480 either = Either :: Right ( "hello" . to_string ( ) ) ;
@@ -482,6 +483,7 @@ fn test_either_enum() -> Result<()> {
482483 * either. as_mut ( ) . right ( ) . unwrap ( ) = "world" . to_string ( ) ;
483484 assert_eq ! ( * either. as_ref( ) . right( ) . unwrap( ) , "world" ) ;
484485 assert_eq ! ( format!( "{either}" ) , "world" ) ;
486+ assert_eq ! ( either. left( ) , None ) ;
485487
486488 Ok ( ( ) )
487489}
@@ -492,8 +494,10 @@ fn test_either_into_lua() -> Result<()> {
492494
493495 // Direct conversion
494496 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 ( _) ) ) ;
497501
498502 // Push into stack
499503 let f =
@@ -514,6 +518,19 @@ fn test_either_into_lua() -> Result<()> {
514518fn test_either_from_lua ( ) -> Result < ( ) > {
515519 let lua = Lua :: new ( ) ;
516520
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+
517534 // From stack
518535 let f = lua. create_function ( |_, either : Either < i32 , Table > | Ok ( either) ) ?;
519536 let either = f. call :: < Either < i32 , Table > > ( 42 ) ?;
0 commit comments