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}