#[cfg(not(feature = "std"))]
use alloc::string::String;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default)]
pub enum ValidationSeverity {
#[default]
Info,
Warning,
Error,
Critical,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ValidationIssue {
pub severity: ValidationSeverity,
pub line: Option<usize>,
pub column: Option<usize>,
pub message: String,
pub rule: String,
pub suggestion: Option<String>,
}
impl ValidationIssue {
pub fn new(severity: ValidationSeverity, message: String, rule: String) -> Self {
Self {
severity,
line: None,
column: None,
message,
rule,
suggestion: None,
}
}
#[must_use]
pub fn at_location(mut self, line: usize, column: usize) -> Self {
self.line = Some(line);
self.column = Some(column);
self
}
#[must_use]
pub fn with_suggestion(mut self, suggestion: String) -> Self {
self.suggestion = Some(suggestion);
self
}
#[must_use]
pub const fn is_error(&self) -> bool {
matches!(
self.severity,
ValidationSeverity::Error | ValidationSeverity::Critical
)
}
#[must_use]
pub const fn is_warning_or_higher(&self) -> bool {
matches!(
self.severity,
ValidationSeverity::Warning | ValidationSeverity::Error | ValidationSeverity::Critical
)
}
}