use serde::{Deserialize, Serialize};
use jellyflow_core::core::{EdgeId, NodeId, PortId, SymbolId};
use jellyflow_core::ops::GraphOp;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DiagnosticSeverity {
Info,
Warning,
Error,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum DiagnosticTarget {
Graph,
Node { id: NodeId },
Port { id: PortId },
Edge { id: EdgeId },
Symbol { id: SymbolId },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Diagnostic {
pub key: String,
pub severity: DiagnosticSeverity,
pub target: DiagnosticTarget,
pub message: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub fixes: Vec<GraphOp>,
}
impl Diagnostic {
pub fn error(
key: impl Into<String>,
target: DiagnosticTarget,
message: impl Into<String>,
) -> Self {
Self {
key: key.into(),
severity: DiagnosticSeverity::Error,
target,
message: message.into(),
fixes: Vec::new(),
}
}
}