use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct DiagnosticSpan {
pub pass: String,
pub node: Option<String>,
pub port: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum DiagnosticCode {
NodeMissing,
PortMissing,
UnresolvedInput,
ConverterMissing,
TypeMismatch,
GpuUnsupported,
ScheduleConflict,
LintWarning,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Diagnostic {
pub code: DiagnosticCode,
pub message: String,
pub span: DiagnosticSpan,
}
impl Diagnostic {
pub fn new(code: DiagnosticCode, message: impl Into<String>) -> Self {
Self {
code,
message: message.into(),
span: DiagnosticSpan {
pass: String::new(),
node: None,
port: None,
},
}
}
pub fn in_pass(mut self, pass: &'static str) -> Self {
self.span.pass = pass.to_string();
self
}
pub fn at_node(mut self, node: impl Into<String>) -> Self {
self.span.node = Some(node.into());
self
}
pub fn at_port(mut self, port: impl Into<String>) -> Self {
self.span.port = Some(port.into());
self
}
}