arete_interpreter/
debugger.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4pub trait VmDebugger: Send + Sync {
5 fn record(&self, event: VmDebugEvent);
6}
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(tag = "kind", rename_all = "snake_case")]
10pub enum VmDebugEvent {
11 ProcessEventStart {
12 event_type: String,
13 context: Option<Value>,
14 },
15 ProcessEventEnd {
16 event_type: String,
17 mutations: usize,
18 warnings: Vec<String>,
19 },
20 HandlerStart {
21 entity_name: String,
22 event_type: String,
23 state_id: u32,
24 },
25 HandlerEnd {
26 entity_name: String,
27 event_type: String,
28 mutations: usize,
29 },
30 LoadEventField {
31 entity_name: String,
32 event_type: String,
33 path: Vec<String>,
34 value: Value,
35 },
36 ReadOrInitState {
37 entity_name: String,
38 event_type: String,
39 key: Value,
40 existing_state: Option<Value>,
41 loaded_state: Value,
42 skipped_reason: Option<String>,
43 },
44 LookupIndex {
45 entity_name: String,
46 event_type: String,
47 index_name: String,
48 lookup_value: Value,
49 hops: Vec<VmLookupHop>,
50 final_result: Value,
51 miss_kind: Option<String>,
52 },
53 FieldWrite {
54 entity_name: String,
55 event_type: String,
56 op: String,
57 path: String,
58 old_value: Option<Value>,
59 new_value: Option<Value>,
60 applied: bool,
61 reason: Option<String>,
62 },
63 EmitMutation {
64 entity_name: String,
65 event_type: String,
66 key: Value,
67 emitted: bool,
68 reason: Option<String>,
69 patch: Option<Value>,
70 dirty_fields: Vec<String>,
71 },
72 QueueAction {
73 entity_name: String,
74 event_type: String,
75 queue_kind: String,
76 lookup_value: String,
77 },
78 FlushAction {
79 entity_name: String,
80 event_type: String,
81 flush_kind: String,
82 trigger: String,
83 count: usize,
84 },
85 PdaReverseLookupUpdate {
86 entity_name: String,
87 event_type: String,
88 lookup_name: String,
89 pda_address: String,
90 primary_key: Value,
91 },
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct VmLookupHop {
96 pub source: String,
97 pub input: Value,
98 pub result: Value,
99 pub chained: bool,
100}