jellyflow_runtime/rules/
diagnostic.rs1use serde::{Deserialize, Serialize};
2
3use jellyflow_core::core::{EdgeId, NodeId, PortId, SymbolId};
4use jellyflow_core::ops::GraphOp;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum DiagnosticSeverity {
10 Info,
12 Warning,
14 Error,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
20#[serde(tag = "kind", rename_all = "snake_case")]
21pub enum DiagnosticTarget {
22 Graph,
24 Node { id: NodeId },
26 Port { id: PortId },
28 Edge { id: EdgeId },
30 Symbol { id: SymbolId },
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct Diagnostic {
37 pub key: String,
39 pub severity: DiagnosticSeverity,
41 pub target: DiagnosticTarget,
43 pub message: String,
45 #[serde(default, skip_serializing_if = "Vec::is_empty")]
47 pub fixes: Vec<GraphOp>,
48}
49
50impl Diagnostic {
51 pub fn error(
52 key: impl Into<String>,
53 target: DiagnosticTarget,
54 message: impl Into<String>,
55 ) -> Self {
56 Self {
57 key: key.into(),
58 severity: DiagnosticSeverity::Error,
59 target,
60 message: message.into(),
61 fixes: Vec::new(),
62 }
63 }
64}