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
use crate::linter::SolidFile;
use crate::types::*;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RuleEntry {
    pub id: String,
    pub severity: Severity,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<Value>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Rules {
    pub name: String,
    pub rules: Vec<RuleEntry>,
}

pub trait RuleType: Send + Sync + 'static {
    fn diagnose(&self, file: &SolidFile, files: &[SolidFile]) -> Vec<LintDiag>;
}

pub type RulesMap = HashMap<String, fn(RuleEntry) -> Box<dyn RuleType>>;