use super::{DiagnosticCategory, DiagnosticStage, Severity, ValidationPhase};
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct Diagnostic {
pub id: String,
pub severity: Severity,
pub stage: DiagnosticStage,
pub category: DiagnosticCategory,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub object_ref: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remediation: Option<String>,
#[serde(rename = "validationPhase", skip_serializing_if = "Option::is_none")]
pub validation_phase: Option<ValidationPhase>,
}
impl Diagnostic {
#[must_use]
pub fn new(
id: impl Into<String>,
severity: Severity,
stage: DiagnosticStage,
category: DiagnosticCategory,
message: impl Into<String>,
) -> Self {
Self {
id: id.into(),
severity,
stage,
category,
message: message.into(),
object_ref: None,
remediation: None,
validation_phase: None,
}
}
#[must_use]
pub fn error(
id: impl Into<String>,
category: DiagnosticCategory,
stage: DiagnosticStage,
message: impl Into<String>,
) -> Self {
Self::new(id, Severity::Error, stage, category, message)
}
#[must_use]
pub fn with_object_ref(mut self, object_ref: impl Into<String>) -> Self {
self.object_ref = Some(object_ref.into());
self
}
#[must_use]
pub fn with_remediation(mut self, remediation: impl Into<String>) -> Self {
self.remediation = Some(remediation.into());
self
}
#[must_use]
pub fn with_validation_phase(mut self, phase: ValidationPhase) -> Self {
self.validation_phase = Some(phase);
self
}
}