csv_diff/
csv_hash_receiver_comparer.rs1use crate::{
2 csv_headers::HeadersParsed,
3 csv_parse_result::{CsvByteRecordWithHash, CsvLeftRightParseResult},
4 diff_result::{DiffByteRecordFirstRow, DiffByteRecordsIterator},
5};
6use crossbeam_channel::{Receiver, Sender};
7
8pub struct CsvHashReceiverStreamComparer {
9 receiver: Receiver<CsvLeftRightParseResult<CsvByteRecordWithHash>>,
10 sender_csv_records_recycle: Sender<csv::ByteRecord>,
11 headers: HeadersParsed,
12}
13
14impl CsvHashReceiverStreamComparer {
15 pub(crate) fn new(
16 receiver: Receiver<CsvLeftRightParseResult<CsvByteRecordWithHash>>,
17 sender_csv_records_recycle: Sender<csv::ByteRecord>,
18 ) -> Self {
19 Self {
20 receiver,
21 sender_csv_records_recycle,
22 headers: Default::default(),
23 }
24 }
25 pub fn recv_hashes_and_compare(self) -> DiffByteRecordsIterator {
26 DiffByteRecordFirstRow::new(self.receiver, self.sender_csv_records_recycle, self.headers)
27 .into_diff_byte_record_iter()
28 }
29 pub(crate) fn headers(mut self, headers: HeadersParsed) -> Self {
30 self.headers = headers;
31 self
32 }
33}