axioval_ir/contract/
ruleset.rs1#![allow(missing_docs)]
2use super::{LocalizedText, PackageMetadata, ParameterValue, Selector};
3use serde::{Deserialize, Serialize};
4use std::collections::BTreeMap;
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase", deny_unknown_fields)]
7pub struct RuleInstance {
8 pub id: String,
9 pub definition_id: String,
10 pub name: LocalizedText,
11 pub description: Option<LocalizedText>,
12 #[serde(default = "yes")]
13 pub enabled: bool,
14 #[serde(default = "severity")]
15 pub severity: Severity,
16 pub message: Option<LocalizedText>,
17 #[serde(default)]
18 pub parameters: BTreeMap<String, ParameterValue>,
19 #[serde(default)]
20 pub applicability: Selector,
21 #[serde(default)]
22 pub tags: Vec<String>,
23}
24#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
25#[serde(deny_unknown_fields)]
26pub struct RuleFolder {
27 pub id: String,
28 pub name: LocalizedText,
29 pub description: Option<LocalizedText>,
30 #[serde(default)]
31 pub rules: Vec<RuleInstance>,
32 #[serde(default)]
33 pub folders: Vec<RuleFolder>,
34}
35#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase", deny_unknown_fields)]
37pub struct RuleSetPackage {
38 pub schema_version: String,
39 pub package: PackageMetadata,
40 pub definition_packages: Vec<String>,
41 pub root: RuleFolder,
42}
43#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub enum Severity {
46 #[default]
47 Error,
48 Warning,
49 Info,
50}
51const fn yes() -> bool {
52 true
53}
54fn severity() -> Severity {
55 Severity::Error
56}