Skip to main content

surf_parse/
error.rs

1use serde::{Deserialize, Serialize};
2
3use crate::types::Span;
4
5/// Errors that can occur during parsing.
6#[derive(Debug, Clone, thiserror::Error)]
7pub enum ParseError {
8    #[error("Invalid front matter: {message}")]
9    FrontMatter { message: String, span: Span },
10
11    #[error("Unclosed block directive '{name}' opened at line {line}")]
12    UnclosedBlock { name: String, line: usize },
13
14    #[error("Invalid attribute syntax: {message}")]
15    InvalidAttrs { message: String, span: Span },
16}
17
18/// A diagnostic message produced during parsing.
19///
20/// Diagnostics are non-fatal: the parser continues and produces a best-effort
21/// result even when diagnostics are emitted.
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct Diagnostic {
24    pub severity: Severity,
25    pub message: String,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub span: Option<Span>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub code: Option<String>,
30}
31
32/// Severity level for diagnostics.
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
34#[serde(rename_all = "lowercase")]
35pub enum Severity {
36    Error,
37    Warning,
38    Info,
39}