use super::SourceSpan;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct Diagnostic {
pub level: DiagnosticLevel,
pub impact: DiagnosticImpact,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<SourceSpan>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub enum DiagnosticImpact {
None,
SemanticCoverage,
}
#[must_use]
pub fn semantics_complete(diagnostics: &[Diagnostic]) -> bool {
diagnostics
.iter()
.all(|diagnostic| diagnostic.impact != DiagnosticImpact::SemanticCoverage)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub enum DiagnosticLevel {
Style,
Warning,
Error,
Unsupported,
}