awaitility 0.4.1

Awaitility for Rust
Documentation
use crate::error::Timeout;
use std::time::Duration;

const DEFAULT_INTERVAL: Duration = Duration::from_millis(50);

#[derive(Clone)]
enum FailStrategy {
    Panic,
    Return,
}

#[derive(Clone)]
pub struct Backend<'a> {
    pub interval: Duration,
    description: Option<&'a str>,
    fail_strategy: FailStrategy,
    pub result: Result<(), Timeout>,
}

impl<'a> Backend<'a> {
    pub const fn default() -> Backend<'static> {
        Backend {
            interval: DEFAULT_INTERVAL,
            description: None,
            fail_strategy: FailStrategy::Panic,
            result: Ok(()),
        }
    }

    #[inline]
    pub fn fail(&mut self, basic_desc: &str) {
        let desc = self.description.unwrap_or("");
        match self.fail_strategy {
            FailStrategy::Panic => panic!("{} {}", basic_desc, desc),
            FailStrategy::Return => self.result = Err(Timeout::new(format!("{} {}", basic_desc, desc))),
        };
    }

    pub fn set_interval(&mut self, interval: Duration) {
        self.interval = interval;
    }

    pub fn set_description<'b: 'a>(&mut self, desc: &'b str) {
        self.description = Some(desc);
    }

    pub fn set_return(&mut self) {
        self.fail_strategy = FailStrategy::Return;
    }
}

#[cfg(test)]
mod backend_test {
    use super::Backend;

    #[test]
    #[should_panic]
    fn fail_test() {
        let mut backend = Backend::default();
        backend.fail("failed,");
    }
}