solidhunter_lib/rules/
factory.rs

1use crate::rules::create_rules;
2use crate::rules::types::*;
3use std::collections::HashMap;
4
5pub struct RuleFactory {
6    _buildables: RulesMap,
7}
8
9impl Default for RuleFactory {
10    fn default() -> Self {
11        RuleFactory {
12            _buildables: create_rules(),
13        }
14    }
15}
16
17impl RuleFactory {
18    pub fn new() -> RuleFactory {
19        RuleFactory {
20            _buildables: HashMap::new(),
21        }
22    }
23
24    pub fn create_rule(&self, rule: RuleEntry) -> Box<dyn RuleType> {
25        let rule_type = self._buildables.get(&rule.id);
26        if rule_type.is_none() {
27            panic!("Rule {} not found", &rule.id);
28        }
29        rule_type.unwrap()(rule)
30    }
31}