| 566 | } |
| 567 | |
| 568 | fn validate_headers( |
| 569 | reader: &mut csv::Reader<std::fs::File>, |
| 570 | intended_headers: Vec<String>, |
| 571 | ) -> Result<(), Box<dyn Error>> { |
| 572 | let headers = reader.headers()?; |
| 573 | let intended_headers = csv::StringRecord::from(intended_headers); |
| 574 | let new_len = headers.len(); |
| 575 | let old_len = intended_headers.len(); |
| 576 | if new_len != old_len { |
| 577 | return Err(format!("Expected {} header cols, but found {}.\nPlease don't propose alterations to the headers in the same PR as a data submission.\n", old_len, new_len))?; |
| 578 | } |
| 579 | for (idx, header) in headers.iter().enumerate() { |
| 580 | let intended_header = &intended_headers[idx]; |
| 581 | if header != intended_header { |
| 582 | return Err(format!("Expected header \"{}\" in column {} but found \"{}\".\nPlease don't alter the headers in a data submission.\n", intended_header, idx, header))?; |
| 583 | } |
| 584 | } |
| 585 | return Ok(()); |
| 586 | } |
| 587 | |
| 588 | fn validate_record( |
| 589 | record: csv::StringRecord, |