File tree Expand file tree Collapse file tree 3 files changed +56
-0
lines changed Expand file tree Collapse file tree 3 files changed +56
-0
lines changed Original file line number Diff line number Diff line change 2222-  Add support for polymorphism to ` StandardJsonPlugin ` . It will now specify
2323  type names as needed via a ` discriminator `  field, which by defualt is
2424  called ` $ ` . This can be changed in the ` StandardJsonPlugin `  constructor.
25+ -  Add ` BuiltListAsyncDeserializer ` . It provides a way to deserialize large
26+   responses without blocking, provided the top level serialized type is
27+   ` BuiltList ` .
2528
2629## 4.4.1  
2730
Original file line number Diff line number Diff line change 1+ // Copyright (c) 2017, Google Inc. Please see the AUTHORS file for details. 
2+ // All rights reserved. Use of this source code is governed by a BSD-style 
3+ // license that can be found in the LICENSE file. 
4+ 
5+ import  'dart:async' ;
6+ 
7+ import  'package:built_value/serializer.dart' ;
8+ 
9+ /// Deserializer for `BuiltList`  that runs asynchronously. 
10+ /// 
11+ /// If you need to deserialize large payloads without blocking, arrange that 
12+ /// the top level serialized object is a `BuiltList` . Then use this class to 
13+ /// deserialize to a [Stream]  of objects. 
14+ class  BuiltListAsyncDeserializer  {
15+   Stream <Object > deserialize (Serializers  serializers, Iterable  serialized,
16+       {FullType  specifiedType:  FullType .unspecified}) async *  {
17+     final  elementType =  specifiedType.parameters.isEmpty
18+         ?  FullType .unspecified
19+         :  specifiedType.parameters[0 ];
20+ 
21+     for  (final  item in  serialized) {
22+       yield  serializers.deserialize (item, specifiedType:  elementType);
23+     }
24+   }
25+ }
Original file line number Diff line number Diff line change 1+ // Copyright (c) 2017, Google Inc. Please see the AUTHORS file for details. 
2+ // All rights reserved. Use of this source code is governed by a BSD-style 
3+ // license that can be found in the LICENSE file. 
4+ 
5+ import  'package:built_collection/built_collection.dart' ;
6+ import  'package:built_value/async_serializer.dart' ;
7+ import  'package:built_value/serializer.dart' ;
8+ import  'package:test/test.dart' ;
9+ 
10+ void  main () {
11+   group ('BuiltList' , () {
12+     final  data =  new  BuiltList <int >([1 , 2 , 3 ]);
13+     final  specifiedType = 
14+         const  FullType (BuiltList , const  [const  FullType (int )]);
15+     final  serializers =  (new  Serializers ().toBuilder ()
16+           ..addBuilderFactory (specifiedType, () =>  new  ListBuilder <int >()))
17+         .build ();
18+     final  serialized =  [1 , 2 , 3 ];
19+ 
20+     test ('can be deserialized asynchronously' , () async  {
21+       final  deserialized =  await  new  BuiltListAsyncDeserializer ()
22+           .deserialize (serializers, serialized, specifiedType:  specifiedType)
23+           .toList ();
24+ 
25+       expect (deserialized, data);
26+     });
27+   });
28+ }
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments