1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use crate::rules::create_rules;
use crate::rules::types::*;
use std::collections::HashMap;

pub struct RuleFactory {
    _buildables: RulesMap,
}

impl Default for RuleFactory {
    fn default() -> Self {
        RuleFactory {
            _buildables: create_rules(),
        }
    }
}

impl RuleFactory {
    pub fn new() -> RuleFactory {
        RuleFactory {
            _buildables: HashMap::new(),
        }
    }

    pub fn create_rule(&self, rule: RuleEntry) -> Box<dyn RuleType> {
        let rule_type = self._buildables.get(&rule.id);
        if rule_type.is_none() {
            panic!("Rule {} not found", &rule.id);
        }
        rule_type.unwrap()(rule)
    }
}