Skip to main content

marser_trace_schema/
event.rs

1//! AI assistance: this file was written with AI assistance. The maintainer reviewed it and did not find errors.
2
3use serde::{Deserialize, Serialize};
4
5use crate::rule::{RuleIdentity, TraceLocation};
6
7#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
8#[non_exhaustive]
9pub enum TraceEventKind {
10    MatchFail,
11    MatchHardError,
12    ParserEnter,
13    ParserExit,
14    /// Reserved for forward compatibility with traces produced by newer marser versions.
15    #[serde(other)]
16    Unknown,
17}
18
19#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
20pub enum NodeTraceKind {
21    TraceMarker,
22    ChoiceArm,
23    CaptureBoundary,
24    Runtime,
25}
26
27#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
28pub enum NodeTraceStatus {
29    Enter,
30    Success,
31    Fail,
32    Backtrack,
33}
34
35#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
36pub enum TraceMarkerPhase {
37    #[default]
38    None,
39    Start,
40    End,
41}
42
43/// How the inner parser/matcher finished for an explicit `.trace()` **End** event.
44#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
45pub enum ExplicitMarkerEndOutcome {
46    /// `Some(_)` / matcher matched.
47    Success,
48    /// `None` / matcher did not match (no hard error).
49    SoftFail,
50    /// Hard error from the inner parse/match.
51    HardError,
52}
53
54/// Compact error context attached to a `.trace()` **End** when the inner parse/match failed.
55#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
56pub struct TraceMarkerFailureSnapshot {
57    pub span_start: usize,
58    pub span_end: usize,
59    pub expected: Vec<String>,
60    pub summary: String,
61}
62
63#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
64pub struct NodeTrace {
65    pub node_id: u64,
66    pub parent_node_id: Option<u64>,
67    pub usage_loc: Option<TraceLocation>,
68    pub definition_loc: Option<TraceLocation>,
69    pub kind: NodeTraceKind,
70    pub status: NodeTraceStatus,
71    pub label: Option<String>,
72    pub input_start: usize,
73    pub input_end: usize,
74    pub is_step_marker: bool,
75    #[serde(default)]
76    pub trace_marker_id: Option<u64>,
77    #[serde(default)]
78    pub marker_phase: TraceMarkerPhase,
79    #[serde(default)]
80    pub is_explicit_trace_marker: bool,
81    pub runtime_kind: Option<TraceEventKind>,
82    pub rule: Option<RuleIdentity>,
83    #[serde(default)]
84    pub error_sink_len: usize,
85    #[serde(default)]
86    pub error_stack_len: usize,
87    #[serde(default)]
88    pub marker_failure: Option<TraceMarkerFailureSnapshot>,
89}