csv_diff/
diff_row.rs

1#[derive(Debug, PartialEq, Clone)]
2pub enum DiffByteRecord {
3    Add(ByteRecordLineInfo),
4    Modify {
5        delete: ByteRecordLineInfo,
6        add: ByteRecordLineInfo,
7        field_indices: Vec<usize>,
8    },
9    Delete(ByteRecordLineInfo),
10}
11
12impl DiffByteRecord {
13    pub fn line_num(&self) -> LineNum {
14        match self {
15            Self::Add(rli) | Self::Delete(rli) => LineNum::OneSide(rli.line),
16            Self::Modify {
17                delete: deleted,
18                add: added,
19                ..
20            } => LineNum::BothSides {
21                for_deleted: deleted.line,
22                for_added: added.line,
23            },
24        }
25    }
26}
27
28pub enum LineNum {
29    OneSide(u64),
30    BothSides { for_deleted: u64, for_added: u64 },
31}
32
33#[derive(Debug, PartialEq, Clone)]
34pub struct ByteRecordLineInfo {
35    byte_record: csv::ByteRecord,
36    line: u64,
37}
38
39impl ByteRecordLineInfo {
40    pub fn new(byte_record: csv::ByteRecord, line: u64) -> Self {
41        Self { byte_record, line }
42    }
43
44    pub fn byte_record(&self) -> &csv::ByteRecord {
45        &self.byte_record
46    }
47
48    pub fn into_byte_record(self) -> csv::ByteRecord {
49        self.byte_record
50    }
51
52    pub fn line(&self) -> u64 {
53        self.line
54    }
55}