use serde::Serialize;
use serde_json::value::RawValue;
#[derive(Debug, Serialize)]
pub struct DiagnosticResult<'a> {
pub diagnostics: Vec<Diagnostic<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<Severity>,
}
#[derive(Debug, Serialize)]
pub struct Diagnostic<'a> {
pub message: &'a RawValue,
pub location: Location,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<Severity>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<Code<'a>>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub suggestions: Vec<Suggestion<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub original_output: Option<&'a RawValue>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[allow(clippy::enum_variant_names)]
pub enum Severity {
UnknownSeverity,
Error,
Warning,
Info,
}
#[derive(Debug, Serialize)]
pub struct Location {
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub range: Option<Range>,
}
#[derive(Debug, Serialize)]
pub struct Range {
pub start: Position,
#[serde(skip_serializing_if = "Option::is_none")]
pub end: Option<Position>,
}
#[derive(Debug, Serialize)]
pub struct Position {
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<u32>,
}
#[derive(Debug, Serialize)]
pub struct Suggestion<'a> {
pub range: Range,
pub text: &'a str,
}
#[derive(Debug, Serialize)]
pub struct Source<'a> {
pub name: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<&'a str>,
}
#[derive(Debug, Serialize)]
pub struct Code<'a> {
pub value: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<&'a str>,
}