yao 0.1.4

a fast, tiny, extensiable workflow engine
Documentation
use crate::{adapter::SomeRule, debug, ActError, ActResult, TaskState};

#[derive(Debug, Default)]
pub struct Rate;

impl SomeRule for Rate {
    fn some(&self, step: &crate::Step, ctx: &crate::Context) -> ActResult<bool> {
        let acts = step.acts();
        if acts.len() == 0 {
            return Ok(false);
        }

        #[allow(unused_assignments)]
        let mut rate = 0_f32;
        match ctx.var("rate") {
            Some(v) => rate = v.as_f64().unwrap() as f32,
            None => return Err(ActError::EnvError("rate".to_string())),
        }

        let success_count = acts
            .iter()
            .filter(|act| act.state() == TaskState::Success)
            .count() as f32;

        let current = success_count / acts.len() as f32;
        debug!("some::rate:{}/{}", current, rate);
        Ok(current >= rate)
    }
}