use std::collections::HashMap;
#[cfg(feature = "integration_testing")]
use fake::{Dummy, Fake, Faker};
#[cfg(feature = "integration_testing")]
use rand::Rng;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ExceptionBreakpointsFilter {
pub filter: String,
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_condition: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition_description: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ColumnDescriptorType {
String,
Number,
Boolean,
UnixTimestampUTC,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ColumnDescriptor {
pub attribute_name: String,
pub label: String,
pub format: String,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub column_descriptor_type: Option<ColumnDescriptorType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ChecksumAlgorithm {
MD5,
SHA1,
SHA256,
#[serde(rename = "timestamp")]
Timestamp,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Capabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_configuration_done_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_function_breakpoints: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_conditional_breakpoints: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_hit_conditional_breakpoints: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_evaluate_for_hovers: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exception_breakpoint_filters: Option<Vec<ExceptionBreakpointsFilter>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_step_back: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_set_variable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_restart_frame: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_goto_targets_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_step_in_targets_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_completions_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completion_trigger_characters: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_modules_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_module_columns: Option<Vec<ColumnDescriptor>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supported_checksum_algorithms: Option<Vec<ChecksumAlgorithm>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_restart_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_exception_options: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_value_formatting_options: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_exception_info_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub support_terminate_debuggee: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub support_suspend_debuggee: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_delayed_stack_trace_loading: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_loaded_sources_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_log_points: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_terminate_threads_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_set_expression: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_terminate_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_data_breakpoints: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_read_memory_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_write_memory_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_disassemble_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_cancel_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_breakpoint_locations_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_clipboard_context: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_stepping_granularity: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_instruction_breakpoints: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_exception_filter_options: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_single_thread_execution_requests: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
pub struct CustomValue(pub Value);
#[cfg(feature = "integration_testing")]
struct ValueFaker;
#[cfg(feature = "integration_testing")]
impl Dummy<ValueFaker> for CustomValue {
fn dummy_with_rng<R: Rng + ?Sized>(_: &ValueFaker, rng: &mut R) -> Self {
CustomValue(match rng.gen_range(0..=5) {
1 => Value::Bool(rng.r#gen()),
2 => Value::Number(serde_json::Number::from_f64(rng.r#gen()).unwrap()),
3 => Value::String(Faker.fake::<String>()),
_ => Value::Null,
})
}
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Source {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_reference: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presentation_hint: Option<PresentationHint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sources: Option<Vec<Source>>,
#[cfg_attr(feature = "integration_testing", dummy(faker = "ValueFaker"))]
#[serde(skip_serializing_if = "Option::is_none")]
pub adapter_data: Option<CustomValue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checksums: Option<Vec<Checksum>>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct SourceBreakpoint {
pub line: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hit_condition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub log_message: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Breakpoint {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i64>,
pub verified: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instruction_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum PresentationHint {
Normal,
Emphasize,
DeEmphasize,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Checksum {
pub algorithm: ChecksumAlgorithm,
pub checksum: String,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ExceptionFilterOptions {
pub filter_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ExceptionBreakMode {
#[default]
Never,
Always,
Unhandled,
UserUnhandled,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ExceptionPathSegment {
#[serde(skip_serializing_if = "Option::is_none")]
pub negate: Option<bool>,
pub names: Vec<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ExceptionOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<Vec<ExceptionPathSegment>>,
pub break_mode: ExceptionBreakMode,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct FunctionBreakpoint {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hit_condition: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum BreakpointEventReason {
Changed,
New,
Removed,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum InvalidatedAreas {
All,
Stacks,
Threads,
Variables,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum LoadedSourceEventReason {
New,
Changed,
Removed,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ModuleEventReason {
New,
Changed,
Removed,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Module {
pub id: ModuleId,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_optimized: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_user_code: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_file_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_time_stamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address_range: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ModuleId {
Number,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum OutputEventCategory {
Console,
Important,
Stdout,
Stderr,
Telemetry,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum OutputEventGroup {
Start,
StartCollapsed,
End,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ProcessEventStartMethod {
Launch,
Attach,
AttachForSuspendedLaunch,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum StoppedEventReason {
Step,
Breakpoint,
Exception,
Pause,
Entry,
Goto,
Function,
Data,
Instruction,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ThreadEventReason {
Started,
Exited,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ValueFormat {
#[serde(skip_serializing_if = "Option::is_none")]
pub hex: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
pub struct StackFrameFormat {
#[serde(skip_serializing_if = "Option::is_none")]
pub parameters: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameter_types: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameter_names: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameter_values: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub module: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_all: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum EvaluateArgumentsContext {
Variables,
Watch,
Repl,
Hover,
Clipboard,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum SteppingGranularity {
Statement,
Line,
Instruction,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum DataBreakpointAccessType {
Read,
Write,
ReadWrite,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct DataBreakpoint {
pub data_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_type: Option<DataBreakpointAccessType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hit_condition: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct InstructionBreakpoint {
pub instruction_reference: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hit_condition: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum VariablesArgumentsFilter {
Indexed,
Named,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct BreakpointLocation {
pub line: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum CompletionItemType {
Method,
Function,
Constructor,
Field,
Variable,
Class,
Interface,
Module,
Property,
Unit,
Value,
Enum,
Keyword,
Snippet,
Text,
Color,
File,
Reference,
CustomColor,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct CompletionItem {
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<CompletionItemType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub length: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selection_start: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selection_length: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct DisassembledInstruction {
pub address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub instruction_bytes: Option<String>,
pub instruction: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Source>,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum VariablePresentationHintKind {
Property,
Method,
Class,
Data,
Event,
BaseClass,
InnerClass,
Interface,
MostDerivedClass,
Virtual,
DataBreakpoint,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum VariablePresentationHintAttributes {
Static,
Constant,
ReadOnly,
RawString,
HasObjectId,
CanHaveObjectId,
HasSideEffects,
HasDataBreakpoint,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum VariablePresentationHintVisibility {
Public,
Private,
Protected,
Internal,
Final,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
#[serde(rename_all = "camelCase")]
pub struct VariablePresentationHint {
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<VariablePresentationHintKind>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attributes: Option<Vec<VariablePresentationHintAttributes>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<VariablePresentationHintVisibility>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lazy: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct ExceptionDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub full_type_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evaluate_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stack_trace: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inner_exception: Option<Vec<ExceptionDetails>>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct GotoTarget {
pub id: i64,
pub label: String,
pub line: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instruction_pointer_reference: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum ScopePresentationhint {
Arguments,
Locals,
Registers,
#[serde(untagged)]
String(String),
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Scope {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub presentation_hint: Option<ScopePresentationhint>,
pub variables_reference: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub named_variables: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub indexed_variables: Option<i64>,
pub expensive: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(untagged)]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum StackFrameModuleid {
Number(i64),
String(String),
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum StackFramePresentationhint {
Normal,
Label,
Subtle,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct StackFrame {
pub id: i64,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
pub line: i64,
pub column: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_line: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_restart: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instruction_pointer_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub module_id: Option<StackFrameModuleid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presentation_hint: Option<StackFramePresentationhint>,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Thread {
pub id: i64,
pub name: String,
}
#[derive(Deserialize, Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub struct Variable {
pub name: String,
pub value: String,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub type_field: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presentation_hint: Option<VariablePresentationHint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evaluate_name: Option<String>,
pub variables_reference: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub named_variables: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub indexed_variables: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_reference: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum RunInTerminalRequestArgumentsKind {
Integrated,
External,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
pub enum StartDebuggingRequestKind {
Launch,
Attach,
}
#[derive(Serialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "integration_testing", derive(Dummy))]
#[cfg_attr(feature = "client", derive(Deserialize))]
pub struct Message {
pub id: i64,
pub format: String,
pub variables: HashMap<String, String>,
pub send_telemetry: Option<bool>,
pub show_user: Option<bool>,
pub url: Option<String>,
pub url_label: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[allow(unused)]
#[test]
fn test_checksum_algorithm_serde() {
let sha = ChecksumAlgorithm::SHA256;
let sha_ser = serde_json::to_value(sha).unwrap();
assert_eq!("SHA256", sha_ser);
let sha_deser: ChecksumAlgorithm = serde_json::from_value(sha_ser).unwrap();
assert!(matches!(ChecksumAlgorithm::SHA256, sha_deser));
let ts = ChecksumAlgorithm::Timestamp;
let ts_ser = serde_json::to_value(&ts).unwrap();
assert_eq!("timestamp", ts_ser);
#[allow(unused)]
let ts_deser: ChecksumAlgorithm = serde_json::from_value(ts_ser).unwrap();
assert!(matches!(ChecksumAlgorithm::Timestamp, ts_deser));
}
#[allow(unused)]
#[test]
fn test_invalidated_areas_serde() {
let str = "string".to_string();
let untagged = InvalidatedAreas::String(str.clone());
let untagged_ser = serde_json::to_value(untagged).unwrap();
assert_eq!(str, untagged_ser);
let untagged_deser: InvalidatedAreas = serde_json::from_value(untagged_ser).unwrap();
assert!(matches!(InvalidatedAreas::String(str), untagged_deser));
}
}