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}