1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use crate::tracers::tracer::Tracer;
use derive_more::{Deref, DerefMut};
use rill_protocol::flow::data::table::{Col, ColRecord, Row, TableEvent, TableState};
use rill_protocol::io::provider::Path;
use std::time::SystemTime;
#[derive(Debug, Deref, DerefMut, Clone)]
pub struct TableTracer {
tracer: Tracer<TableState>,
}
impl TableTracer {
pub fn new(path: Path, columns: Vec<(Col, impl ToString)>) -> Self {
let columns = columns
.into_iter()
.map(|(col_id, title)| {
let record = ColRecord {
title: title.to_string(),
};
(col_id, record)
})
.collect();
let state = TableState::new(columns);
let tracer = Tracer::new_tracer(state, path, None);
Self { tracer }
}
pub fn add_row(&self, row: Row) {
let event = TableEvent::AddRow { row };
self.tracer.send(event, None);
}
pub fn del_row(&self, row: Row) {
let event = TableEvent::DelRow { row };
self.tracer.send(event, None);
}
pub fn set_cell(
&self,
row: Row,
col: Col,
value: impl ToString,
timestamp: Option<SystemTime>,
) {
let event = TableEvent::SetCell {
row,
col,
value: value.to_string(),
};
self.tracer.send(event, timestamp);
}
}