obnam_benchmark/step.rs
1use crate::specification::{Change, Create, FileCount};
2
3/// A step specification in the execution of a benchmark.
4#[derive(Debug)]
5pub enum Step {
6 /// Start a benchmark.
7 Start(
8 /// Unique name of the benchmark.
9 String,
10 ),
11 /// Finish a benchmark with a given name.
12 Stop(
13 /// Unique name of the benchmark.
14 String,
15 ),
16 /// Create test data files.
17 Create(Create),
18 /// Rename test data files.
19 Rename(FileCount),
20 /// Delete test data files.
21 Delete(FileCount),
22 /// Make the nth backup in the benchmark.
23 Backup(
24 /// n
25 usize,
26 ),
27 /// Restore the nth backup in the benchmark.
28 Restore(
29 /// n
30 usize,
31 ),
32 /// Create and remember a manifest of current live data. Call it id.
33 ManifestLive(
34 /// id
35 usize,
36 ),
37 /// Create and remember a manifest of latest restored data. Call it id.
38 ManifestRestored(
39 /// id
40 usize,
41 ),
42 /// Compare two manifests for equality.
43 CompareManifests(
44 /// First
45 usize,
46 /// Second.
47 usize,
48 ),
49}
50
51/// Possible errors from executing a benchmark step.
52#[derive(Debug, thiserror::Error)]
53pub enum StepError {
54 /// Generic I/O error.
55 #[error(transparent)]
56 Io(std::io::Error),
57}
58
59impl Step {
60 pub(crate) fn from(change: &Change) -> Self {
61 match change {
62 Change::Create(x) => Self::Create(x.clone()),
63 Change::Rename(x) => Self::Rename(x.clone()),
64 Change::Delete(x) => Self::Delete(x.clone()),
65 }
66 }
67}