Skip to main content

arete_interpreter/
debugger.rs

1use 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}