@@ -78,7 +78,7 @@ fn create_model_sets_for_line_session<R: Report, B: ReportBuilder<R>>(
78
78
coverage_type : & models:: CoverageType ,
79
79
line_no : i64 ,
80
80
datapoint : Option < & CoverageDatapoint > ,
81
- ctx : & mut ParseCtx < R , B > ,
81
+ ctx : & ParseCtx < R , B > ,
82
82
) -> LineSessionModels {
83
83
let source_file_id = ctx. report_json_files [ & ctx. chunk . index ] ;
84
84
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>>(
184
184
}
185
185
}
186
186
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 {
191
191
// A `ReportLine` is a collection of `LineSession`s, and each `LineSession` has
192
192
// a set of models we need to insert for it. Build a list of those sets of
193
193
// models.
194
- let mut line_session_models = vec ! [ ] ;
195
- for line_session in & report_line. sessions {
194
+ report_line. sessions . iter ( ) . map ( |session| {
196
195
// Datapoints are effectively `LineSession`-scoped, but they don't actually live
197
196
// in the `LineSession`. Get the `CoverageDatapoint` for this
198
197
// `LineSession` if there is one.
199
198
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 ) )
201
200
} else {
202
201
None
203
202
} ;
204
- line_session_models . push ( create_model_sets_for_line_session (
205
- line_session ,
203
+ create_model_sets_for_line_session (
204
+ session ,
206
205
& report_line. coverage_type ,
207
206
report_line. line_no ,
208
207
datapoint,
209
208
ctx,
210
- ) ) ;
211
- }
212
- line_session_models
209
+ )
210
+ } )
213
211
}
214
212
215
213
/// 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>>(
231
229
// assigned as a side-effect of this insertion. That lets us populate the
232
230
// `local_sample_id` foreign key on all of the models associated with each
233
231
// `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 ) ) ?;
240
235
241
236
// Populate `local_sample_id` and insert all of the context assocs for each
242
237
// `LineSession` (if there are any)
@@ -921,10 +916,11 @@ mod tests {
921
916
datapoints : None ,
922
917
} ;
923
918
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 ( ) ;
925
921
assert_eq ! (
926
922
model_sets,
927
- vec! [
923
+ & [
928
924
LineSessionModels {
929
925
sample: models:: CoverageSample {
930
926
raw_upload_id: 123 ,
@@ -1018,10 +1014,11 @@ mod tests {
1018
1014
datapoints : Some ( Some ( datapoints) ) ,
1019
1015
} ;
1020
1016
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 ( ) ;
1022
1019
assert_eq ! (
1023
1020
model_sets,
1024
- vec! [
1021
+ & [
1025
1022
LineSessionModels {
1026
1023
sample: models:: CoverageSample {
1027
1024
raw_upload_id: 123 ,
0 commit comments