@@ -16,7 +16,6 @@ use gluon::{
16
16
query:: Compilation ,
17
17
vm:: {
18
18
api:: {
19
- de:: De ,
20
19
scoped:: { Ref , RefMut } ,
21
20
FunctionRef , FutureResult , Hole , OpaqueValue , OwnedFunction , RuntimeResult , VmType , IO ,
22
21
} ,
@@ -298,47 +297,6 @@ fn tuples_start_at_0() {
298
297
) ;
299
298
}
300
299
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
-
342
300
#[ test]
343
301
fn use_rust_created_tuple_as_polymorphic ( ) {
344
302
let _ = :: env_logger:: try_init ( ) ;
@@ -368,41 +326,6 @@ fn use_rust_created_record_as_polymorphic() {
368
326
assert_eq ! ( result, 1 ) ;
369
327
}
370
328
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
-
406
329
#[ test]
407
330
fn get_value_boxed_or_unboxed ( ) {
408
331
let _ = :: env_logger:: try_init ( ) ;
@@ -777,3 +700,86 @@ fn clone_userdata() {
777
700
778
701
assert_eq ! ( * result, Test ( 123 ) ) ;
779
702
}
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