@@ -278,14 +278,13 @@ fn assemble_value(
278278 }
279279}
280280
281- fn assemble_input_values (
282- value_mappings : & [ AnalyzedValueMapping ] ,
283- scoped_entries : RefList < ' _ , & ScopeEntry < ' _ > > ,
284- ) -> Vec < value:: Value > {
281+ fn assemble_input_values < ' a > (
282+ value_mappings : & ' a [ AnalyzedValueMapping ] ,
283+ scoped_entries : RefList < ' a , & ScopeEntry < ' a > > ,
284+ ) -> impl Iterator < Item = value:: Value > + ' a {
285285 value_mappings
286286 . iter ( )
287- . map ( |value_mapping| assemble_value ( value_mapping, scoped_entries) )
288- . collect ( )
287+ . map ( move |value_mapping| assemble_value ( value_mapping, scoped_entries) )
289288}
290289
291290async fn evaluate_child_op_scope (
@@ -316,7 +315,9 @@ async fn evaluate_op_scope(
316315 for reactive_op in op_scope. reactive_ops . iter ( ) {
317316 match reactive_op {
318317 AnalyzedReactiveOp :: Transform ( op) => {
319- let input_values = assemble_input_values ( & op. inputs , scoped_entries) ;
318+ let mut input_values = Vec :: with_capacity ( op. inputs . len ( ) ) ;
319+ input_values
320+ . extend ( assemble_input_values ( & op. inputs , scoped_entries) . collect :: < Vec < _ > > ( ) ) ;
320321 let output_value_cell = memory. get_cache_entry (
321322 || {
322323 Ok ( op
@@ -402,7 +403,23 @@ async fn evaluate_op_scope(
402403 }
403404
404405 AnalyzedReactiveOp :: Collect ( op) => {
405- let field_values = assemble_input_values ( & op. input . fields , scoped_entries) ;
406+ let mut field_values = Vec :: with_capacity (
407+ op. input . fields . len ( ) + if op. has_auto_uuid_field { 1 } else { 0 } ,
408+ ) ;
409+ let field_values_iter = assemble_input_values ( & op. input . fields , scoped_entries) ;
410+ if op. has_auto_uuid_field {
411+ field_values. push ( value:: Value :: Null ) ;
412+ field_values. extend ( field_values_iter) ;
413+ let uuid = memory. next_uuid (
414+ op. fingerprinter
415+ . clone ( )
416+ . with ( & field_values[ 1 ..] ) ?
417+ . into_fingerprint ( ) ,
418+ ) ?;
419+ field_values[ 0 ] = value:: Value :: Basic ( value:: BasicValue :: Uuid ( uuid) ) ;
420+ } else {
421+ field_values. extend ( field_values_iter) ;
422+ } ;
406423 let collector_entry = scoped_entries
407424 . headn ( op. collector_ref . scope_up_level as usize )
408425 . unwrap ( ) ;
0 commit comments