use crate::source::LineColumn;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Breakpoint {
pub id: u32,
pub file_id: u32,
pub loc: LineColumn,
pub loc_end: Option<LineColumn>,
pub breakpoint_type: BreakpointType,
pub capture: VariableCapture,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BreakpointType {
#[default]
Breakpoint,
FunctionCall {
fn_name: String,
},
FunctionReturn,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VariableCapture {
Arguments,
Locals,
Only(Vec<String>),
#[default]
None,
}
impl BreakpointType {
pub fn as_str(&self) -> &'static str {
match self {
Self::Breakpoint => "Breakpoint",
Self::FunctionCall { .. } => "FunctionCall",
Self::FunctionReturn => "FunctionReturn",
}
}
}