asimov_dataset_cli/ui/
prepare.rs1use std::{collections::VecDeque, path::PathBuf};
4
5#[derive(Debug, Default)]
7pub struct PrepareState {
8 pub current_file: Option<PathBuf>,
9 pub current_file_size: usize,
10 pub current_read_bytes: usize,
11
12 pub queued_files: VecDeque<(PathBuf, usize)>,
13 pub total_bytes: usize,
14
15 pub read_bytes: usize,
16 pub read_files: Vec<PathBuf>,
17 pub read_statements: usize,
18
19 pub prepared_bytes: usize,
20 pub prepared_files: Vec<PathBuf>,
21 pub prepared_statements: usize,
22 pub skipped_statemets: usize,
23}
24
25impl PrepareState {
26 pub fn update_reader_state(&mut self, progress: ReaderProgress) {
27 match self.current_file {
28 Some(ref curr) if *curr == progress.filename => {
29 self.current_read_bytes += progress.bytes;
30 }
31 _ => {
32 let size = self
33 .queued_files
34 .iter()
35 .find(|(name, _size)| *name == progress.filename)
36 .unwrap()
37 .1;
38 self.current_file = Some(progress.filename.clone());
39 self.current_file_size = size;
40 self.current_read_bytes = progress.bytes;
41 }
42 }
43
44 self.read_bytes += progress.bytes;
45 self.read_statements += progress.statement_count;
46
47 if progress.finished {
48 self.queued_files
49 .retain(|(name, _size)| *name != progress.filename);
50 self.read_files.push(progress.filename);
51 self.current_file = None;
52 }
53 }
54
55 pub fn update_prepare_state(&mut self, progress: PrepareProgress) {
56 self.prepared_bytes += progress.bytes;
57 self.prepared_statements += progress.statement_count;
58 self.skipped_statemets += progress.skipped_statements;
59 self.prepared_files.push(progress.filename);
60 }
61}
62
63#[derive(Debug, Default)]
64pub struct ReaderProgress {
65 pub filename: PathBuf,
66 pub bytes: usize,
67 pub statement_count: usize,
68 pub finished: bool,
69}
70
71#[derive(Debug, Default)]
72pub struct PrepareProgress {
73 pub filename: PathBuf,
74 pub bytes: usize,
75 pub statement_count: usize,
76 pub skipped_statements: usize,
77}