axioval_ir/contract/
ruleset.rs

1#![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}