code_baseline/rules/
factory.rs1use crate::config::RuleConfig;
2use crate::rules::banned_dependency::BannedDependencyRule;
3use crate::rules::banned_import::BannedImportRule;
4use crate::rules::banned_pattern::BannedPatternRule;
5use crate::rules::file_presence::FilePresenceRule;
6use crate::rules::ratchet::RatchetRule;
7use crate::rules::required_pattern::RequiredPatternRule;
8use crate::rules::tailwind_dark_mode::TailwindDarkModeRule;
9use crate::rules::tailwind_theme_tokens::TailwindThemeTokensRule;
10use crate::rules::window_pattern::WindowPatternRule;
11use crate::rules::{Rule, RuleBuildError};
12use std::fmt;
13
14#[derive(Debug)]
15pub enum FactoryError {
16 UnknownRuleType(String),
17 BuildError(RuleBuildError),
18}
19
20impl fmt::Display for FactoryError {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 match self {
23 FactoryError::UnknownRuleType(t) => write!(f, "unknown rule type: '{}'", t),
24 FactoryError::BuildError(e) => write!(f, "{}", e),
25 }
26 }
27}
28
29impl std::error::Error for FactoryError {}
30
31impl From<RuleBuildError> for FactoryError {
32 fn from(e: RuleBuildError) -> Self {
33 FactoryError::BuildError(e)
34 }
35}
36
37pub fn build_rule(rule_type: &str, config: &RuleConfig) -> Result<Box<dyn Rule>, FactoryError> {
39 match rule_type {
40 "tailwind-dark-mode" => Ok(Box::new(TailwindDarkModeRule::new(config)?)),
41 "tailwind-theme-tokens" => Ok(Box::new(TailwindThemeTokensRule::new(config)?)),
42 "ratchet" => Ok(Box::new(RatchetRule::new(config)?)),
43 "banned-pattern" => Ok(Box::new(BannedPatternRule::new(config)?)),
44 "banned-import" => Ok(Box::new(BannedImportRule::new(config)?)),
45 "banned-dependency" => Ok(Box::new(BannedDependencyRule::new(config)?)),
46 "required-pattern" => Ok(Box::new(RequiredPatternRule::new(config)?)),
47 "file-presence" => Ok(Box::new(FilePresenceRule::new(config)?)),
48 "window-pattern" => Ok(Box::new(WindowPatternRule::new(config)?)),
49 _ => Err(FactoryError::UnknownRuleType(rule_type.to_string())),
50 }
51}