use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DiagnosticSeverity {
Error,
Warning,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Diagnostic {
pub severity: DiagnosticSeverity,
pub code: String,
pub module: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub message: String,
}
impl Diagnostic {
pub(crate) fn error(code: impl Into<String>, message: impl Into<String>) -> Self {
Self {
severity: DiagnosticSeverity::Error,
code: code.into(),
module: None,
path: None,
line: None,
column: None,
message: message.into(),
}
}
pub(crate) fn warning(code: impl Into<String>, message: impl Into<String>) -> Self {
Self {
severity: DiagnosticSeverity::Warning,
code: code.into(),
module: None,
path: None,
line: None,
column: None,
message: message.into(),
}
}
pub(crate) fn in_module(mut self, module: impl Into<String>) -> Self {
self.module = Some(module.into());
self
}
pub(crate) fn at_path(mut self, path: impl Into<String>) -> Self {
self.path = Some(path.into());
self
}
}