csv_diff/
csv_hash_receiver_comparer.rs

1use 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}