use serde::{Deserialize, Serialize}; use crate::model::AppMode; pub const DEVTOOLS_PROTOCOL_VERSION: u32 = 1; #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "type")] pub enum DebugCommand { #[serde(rename = "ok")] Ok, #[serde(rename = "start")] Start, #[serde(rename = "pause")] Pause, #[serde(rename = "resume")] Resume, #[serde(rename = "step")] Step, #[serde(rename = "stepFrame")] StepFrame, #[serde(rename = "getState")] GetState, #[serde(rename = "setBreakpoint")] SetBreakpoint { pc: usize }, #[serde(rename = "listBreakpoints")] ListBreakpoints, #[serde(rename = "clearBreakpoint")] ClearBreakpoint { pc: usize }, } #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "type")] pub enum DebugResponse { #[serde(rename = "handshake")] Handshake { protocol_version: u32, runtime_version: String, cartridge: HandshakeCartridge, }, #[serde(rename = "state")] State { pc: usize, stack_top: Vec, frame_index: u64, app_id: u32, }, #[serde(rename = "breakpoints")] Breakpoints { pcs: Vec, }, } #[derive(Debug, Serialize, Deserialize)] pub struct HandshakeCartridge { pub app_id: u32, pub title: String, pub app_version: String, pub app_mode: AppMode, } #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "event")] pub enum DebugEvent { #[serde(rename = "breakpointHit")] BreakpointHit { pc: usize, frame_index: u64, }, #[serde(rename = "log")] Log { level: String, source: String, msg: String, }, #[serde(rename = "telemetry")] Telemetry { frame_index: u64, vm_steps: u32, syscalls: u32, cycles: u64, }, #[serde(rename = "cert")] Cert { rule: String, used: u64, limit: u64, frame_index: u64, }, }