Skip to main content

ogma_libs/
bdd.rs

1//! BDD utilities
2
3/// A BDD step
4#[derive(Copy, Clone, Debug)]
5pub enum Step {
6    /// Initial state of the BDD state
7    Start,
8    /// Given: Parsing Input
9    Given,
10    /// When: Conditional assertions
11    When,
12    /// Then: Produce side effects
13    Then,
14}
15
16impl Step {
17    /// Initialize BDD Step
18    pub fn new() -> Self {
19        Step::Start
20    }
21
22    /// Get the next BDD Step given a keyword: "Given", "When", "Then" or "And"
23    pub fn next(self, keyword: &str) -> Option<Step> {
24        match keyword {
25            "Given" => match self {
26                Step::Start | Step::Given => Some(Step::Given),
27                _ => None,
28            },
29            "When" => match self {
30                Step::Start | Step::Given | Step::When => Some(Step::Given),
31                Step::Then => None,
32            },
33            "Then" => match self {
34                Step::Start | Step::Given | Step::When | Step::Then => Some(Step::Then),
35            },
36            "And" => match self {
37                Step::Given | Step::When | Step::Then => Some(self),
38                Step::Start => None,
39            },
40            _ => None,
41        }
42    }
43}
44
45impl Default for Step {
46    fn default() -> Self {
47        Step::Start
48    }
49}