@@ -78,7 +78,7 @@ fn create_model_sets_for_line_session<R: Report, B: ReportBuilder<R>>(
7878 coverage_type : & models:: CoverageType ,
7979 line_no : i64 ,
8080 datapoint : Option < & CoverageDatapoint > ,
81- ctx : & mut ParseCtx < R , B > ,
81+ ctx : & ParseCtx < R , B > ,
8282) -> LineSessionModels {
8383 let source_file_id = ctx. report_json_files [ & ctx. chunk . index ] ;
8484 let ( hits, hit_branches, total_branches) = separate_pyreport_coverage ( & line_session. coverage ) ;
@@ -184,32 +184,30 @@ fn create_model_sets_for_line_session<R: Report, B: ReportBuilder<R>>(
184184 }
185185}
186186
187- fn create_model_sets_for_report_line < R : Report , B : ReportBuilder < R > > (
188- report_line : & ReportLine ,
189- ctx : & mut ParseCtx < R , B > ,
190- ) -> Vec < LineSessionModels > {
187+ fn create_model_sets_for_report_line < ' a , R : Report , B : ReportBuilder < R > > (
188+ report_line : & ' a ReportLine ,
189+ ctx : & ' a ParseCtx < R , B > ,
190+ ) -> impl Iterator < Item = LineSessionModels > + ' a {
191191 // A `ReportLine` is a collection of `LineSession`s, and each `LineSession` has
192192 // a set of models we need to insert for it. Build a list of those sets of
193193 // models.
194- let mut line_session_models = vec ! [ ] ;
195- for line_session in & report_line. sessions {
194+ report_line. sessions . iter ( ) . map ( |session| {
196195 // Datapoints are effectively `LineSession`-scoped, but they don't actually live
197196 // in the `LineSession`. Get the `CoverageDatapoint` for this
198197 // `LineSession` if there is one.
199198 let datapoint = if let Some ( Some ( datapoints) ) = & report_line. datapoints {
200- datapoints. get ( & ( line_session . session_id as u32 ) )
199+ datapoints. get ( & ( session . session_id as u32 ) )
201200 } else {
202201 None
203202 } ;
204- line_session_models . push ( create_model_sets_for_line_session (
205- line_session ,
203+ create_model_sets_for_line_session (
204+ session ,
206205 & report_line. coverage_type ,
207206 report_line. line_no ,
208207 datapoint,
209208 ctx,
210- ) ) ;
211- }
212- line_session_models
209+ )
210+ } )
213211}
214212
215213/// Each [`ReportLine`] from a chunks file is comprised of a number of
@@ -231,12 +229,9 @@ pub fn save_report_lines<R: Report, B: ReportBuilder<R>>(
231229 // assigned as a side-effect of this insertion. That lets us populate the
232230 // `local_sample_id` foreign key on all of the models associated with each
233231 // `CoverageSample`.
234- ctx. db . report_builder . multi_insert_coverage_sample (
235- models
236- . iter_mut ( )
237- . map ( |LineSessionModels { sample, .. } | sample)
238- . collect ( ) ,
239- ) ?;
232+ ctx. db
233+ . report_builder
234+ . multi_insert_coverage_sample ( models. iter_mut ( ) . map ( |m| & mut m. sample ) ) ?;
240235
241236 // Populate `local_sample_id` and insert all of the context assocs for each
242237 // `LineSession` (if there are any)
@@ -921,10 +916,11 @@ mod tests {
921916 datapoints : None ,
922917 } ;
923918
924- let model_sets = create_model_sets_for_report_line ( & report_line, parse_ctx) ;
919+ let model_sets: Vec < _ > =
920+ create_model_sets_for_report_line ( & report_line, parse_ctx) . collect ( ) ;
925921 assert_eq ! (
926922 model_sets,
927- vec! [
923+ & [
928924 LineSessionModels {
929925 sample: models:: CoverageSample {
930926 raw_upload_id: 123 ,
@@ -1018,10 +1014,11 @@ mod tests {
10181014 datapoints : Some ( Some ( datapoints) ) ,
10191015 } ;
10201016
1021- let model_sets = create_model_sets_for_report_line ( & report_line, parse_ctx) ;
1017+ let model_sets: Vec < _ > =
1018+ create_model_sets_for_report_line ( & report_line, parse_ctx) . collect ( ) ;
10221019 assert_eq ! (
10231020 model_sets,
1024- vec! [
1021+ & [
10251022 LineSessionModels {
10261023 sample: models:: CoverageSample {
10271024 raw_upload_id: 123 ,
0 commit comments