use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[derive(Deserialize)]
pub struct Request {
pub diagnostics: String,
pub paragraphs: Vec<String>,
pub language: Option<String>,
pub project: String,
#[serde(default)]
pub settings: Map<String, Value>,
#[serde(default)]
pub locale: Option<String>,
}
#[derive(Serialize, Default)]
pub struct Reply {
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Serialize)]
pub struct Diagnostic {
pub paragraph: usize,
pub start: usize,
pub end: usize,
pub message: String,
pub fixes: Vec<Fix>,
#[serde(skip_serializing_if = "Severity::is_error")]
pub severity: Severity,
}
#[derive(Serialize, Clone, Copy, PartialEq, Eq, Default, Debug)]
#[serde(rename_all = "lowercase")]
pub enum Severity {
#[default]
Error,
Suggestion,
}
impl Severity {
fn is_error(&self) -> bool {
*self == Severity::Error
}
}
#[derive(Serialize)]
#[serde(untagged)]
pub enum Fix {
Replace(String),
Labelled { replacement: String, label: String },
}