use crate::findings::types::{Confidence, FindingCategory, Severity};
use crate::rules::{RuleLifecycle, SignalSource};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RuleMetadata {
pub rule_id: &'static str,
pub title: &'static str,
pub category: FindingCategory,
pub default_severity: Severity,
pub max_severity: Severity,
pub default_confidence: Confidence,
pub max_confidence: Confidence,
pub contextual_confidence: bool,
pub lifecycle: RuleLifecycle,
pub signal_source: SignalSource,
pub docs_url: Option<&'static str>,
pub description: &'static str,
pub recommendation: Option<&'static str>,
pub false_positive_notes: Option<&'static str>,
pub tags: &'static [&'static str],
}
impl RuleMetadata {
pub const DEFAULT: Self = Self {
rule_id: "",
title: "",
category: FindingCategory::Architecture,
default_severity: Severity::Info,
max_severity: Severity::Info,
default_confidence: Confidence::Medium,
max_confidence: Confidence::Low,
contextual_confidence: false,
lifecycle: RuleLifecycle::Preview,
signal_source: SignalSource::TextHeuristic,
docs_url: None,
description: "",
recommendation: None,
false_positive_notes: None,
tags: &[],
};
pub fn severity_ceiling(&self) -> Severity {
self.max_severity.max(self.default_severity)
}
pub fn confidence_ceiling(&self) -> Confidence {
self.max_confidence.max(self.default_confidence)
}
}