@@ -16,7 +16,6 @@ use gluon::{
1616 query:: Compilation ,
1717 vm:: {
1818 api:: {
19- de:: De ,
2019 scoped:: { Ref , RefMut } ,
2120 FunctionRef , FutureResult , Hole , OpaqueValue , OwnedFunction , RuntimeResult , VmType , IO ,
2221 } ,
@@ -298,47 +297,6 @@ fn tuples_start_at_0() {
298297 ) ;
299298}
300299
301- #[ test]
302- fn use_type_from_type_field ( ) {
303- let _ = :: env_logger:: try_init ( ) ;
304- let vm = make_vm ( ) ;
305-
306- #[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
307- enum Test {
308- A ( i32 ) ,
309- B ( String ) ,
310- C ,
311- }
312- impl VmType for Test {
313- type Type = Self ;
314- fn make_type ( vm : & Thread ) -> ArcType {
315- if let Some ( typ) = vm. get_type :: < Self > ( ) {
316- return typ;
317- }
318-
319- let ( name, typ) = gluon:: vm:: api:: typ:: from_rust :: < Self > ( vm) . unwrap ( ) ;
320- vm. register_type_as (
321- name. clone ( ) ,
322- Alias :: new ( name, Vec :: new ( ) , typ) ,
323- :: std:: any:: TypeId :: of :: < Self > ( ) ,
324- )
325- . unwrap ( )
326- }
327- }
328-
329- add_extern_module ( & vm, "test_types" , |vm| {
330- ExternModule :: new ( vm, record ! { type Test => Test } )
331- } ) ;
332- let text = r#"
333- let { Test } = import! test_types
334- B "abc"
335- "# ;
336- let ( De ( actual) , _) = vm
337- . run_expr :: < De < Test > > ( "test" , text)
338- . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
339- assert_eq ! ( actual, Test :: B ( "abc" . to_string( ) ) ) ;
340- }
341-
342300#[ test]
343301fn use_rust_created_tuple_as_polymorphic ( ) {
344302 let _ = :: env_logger:: try_init ( ) ;
@@ -368,41 +326,6 @@ fn use_rust_created_record_as_polymorphic() {
368326 assert_eq ! ( result, 1 ) ;
369327}
370328
371- #[ test]
372- fn return_btreemap ( ) {
373- let _ = :: env_logger:: try_init ( ) ;
374-
375- let vm = make_vm ( ) ;
376-
377- add_extern_module_with_deps (
378- & vm,
379- "test" ,
380- |vm| {
381- ExternModule :: new (
382- vm,
383- primitive ! ( 1 , "test" , |( ) | {
384- vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
385- . into_iter( )
386- . collect:: <BTreeMap <_, _>>( )
387- } ) ,
388- )
389- } ,
390- vec ! [ "std.map" . into( ) , "std.json.de" . into( ) ] ,
391- ) ;
392-
393- vm. run_expr :: < ( ) > ( "" , "let _ = import! test in ()" )
394- . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
395- let ( result, _) = vm
396- . run_expr :: < BTreeMap < _ , _ > > ( "" , "(import! test) ()" )
397- . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
398- assert_eq ! (
399- result,
400- vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
401- . into_iter( )
402- . collect:: <BTreeMap <_, _>>( )
403- ) ;
404- }
405-
406329#[ test]
407330fn get_value_boxed_or_unboxed ( ) {
408331 let _ = :: env_logger:: try_init ( ) ;
@@ -777,3 +700,86 @@ fn clone_userdata() {
777700
778701 assert_eq ! ( * result, Test ( 123 ) ) ;
779702}
703+
704+ #[ cfg( feature = "serialization" ) ]
705+ mod serialization {
706+ use super :: * ;
707+
708+ use gluon:: vm:: api:: de:: De ;
709+
710+ #[ test]
711+ fn use_type_from_type_field ( ) {
712+ let _ = :: env_logger:: try_init ( ) ;
713+ let vm = make_vm ( ) ;
714+
715+ #[ derive( Serialize , Deserialize , PartialEq , Debug ) ]
716+ enum Test {
717+ A ( i32 ) ,
718+ B ( String ) ,
719+ C ,
720+ }
721+ impl VmType for Test {
722+ type Type = Self ;
723+ fn make_type ( vm : & Thread ) -> ArcType {
724+ if let Some ( typ) = vm. get_type :: < Self > ( ) {
725+ return typ;
726+ }
727+
728+ let ( name, typ) = gluon:: vm:: api:: typ:: from_rust :: < Self > ( vm) . unwrap ( ) ;
729+ vm. register_type_as (
730+ name. clone ( ) ,
731+ Alias :: new ( name, Vec :: new ( ) , typ) ,
732+ :: std:: any:: TypeId :: of :: < Self > ( ) ,
733+ )
734+ . unwrap ( )
735+ }
736+ }
737+
738+ add_extern_module ( & vm, "test_types" , |vm| {
739+ ExternModule :: new ( vm, record ! { type Test => Test } )
740+ } ) ;
741+ let text = r#"
742+ let { Test } = import! test_types
743+ B "abc"
744+ "# ;
745+ let ( De ( actual) , _) = vm
746+ . run_expr :: < De < Test > > ( "test" , text)
747+ . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
748+ assert_eq ! ( actual, Test :: B ( "abc" . to_string( ) ) ) ;
749+ }
750+
751+ #[ test]
752+ fn return_btreemap ( ) {
753+ let _ = :: env_logger:: try_init ( ) ;
754+
755+ let vm = make_vm ( ) ;
756+
757+ add_extern_module_with_deps (
758+ & vm,
759+ "test" ,
760+ |vm| {
761+ ExternModule :: new (
762+ vm,
763+ primitive ! ( 1 , "test" , |( ) | {
764+ vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
765+ . into_iter( )
766+ . collect:: <BTreeMap <_, _>>( )
767+ } ) ,
768+ )
769+ } ,
770+ vec ! [ "std.map" . into( ) , "std.json.de" . into( ) ] ,
771+ ) ;
772+
773+ vm. run_expr :: < ( ) > ( "" , "let _ = import! test in ()" )
774+ . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
775+ let ( result, _) = vm
776+ . run_expr :: < BTreeMap < _ , _ > > ( "" , "(import! test) ()" )
777+ . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
778+ assert_eq ! (
779+ result,
780+ vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
781+ . into_iter( )
782+ . collect:: <BTreeMap <_, _>>( )
783+ ) ;
784+ }
785+ }
0 commit comments