marser_trace_schema/
event.rs1use 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 #[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#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
45pub enum ExplicitMarkerEndOutcome {
46 Success,
48 SoftFail,
50 HardError,
52}
53
54#[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}