// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Generated with protocol_gen.go -- do not edit this file.
//   go run scripts/protocol_gen/protocol_gen.go

#include "dap/protocol.h"

namespace dap {

ChecksumAlgorithm::ChecksumAlgorithm() = default;
ChecksumAlgorithm::~ChecksumAlgorithm() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ChecksumAlgorithm, "");

Checksum::Checksum() = default;
Checksum::~Checksum() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Checksum,
                              "",
                              DAP_FIELD(algorithm, "algorithm"),
                              DAP_FIELD(checksum, "checksum"));

Source::Source() = default;
Source::~Source() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Source,
                              "",
                              DAP_FIELD(adapterData, "adapterData"),
                              DAP_FIELD(checksums, "checksums"),
                              DAP_FIELD(name, "name"),
                              DAP_FIELD(origin, "origin"),
                              DAP_FIELD(path, "path"),
                              DAP_FIELD(presentationHint, "presentationHint"),
                              DAP_FIELD(sourceReference, "sourceReference"),
                              DAP_FIELD(sources, "sources"));

Breakpoint::Breakpoint() = default;
Breakpoint::~Breakpoint() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Breakpoint,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(message, "message"),
                              DAP_FIELD(source, "source"),
                              DAP_FIELD(verified, "verified"));

BreakpointLocation::BreakpointLocation() = default;
BreakpointLocation::~BreakpointLocation() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(BreakpointLocation,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(line, "line"));

ColumnDescriptor::ColumnDescriptor() = default;
ColumnDescriptor::~ColumnDescriptor() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ColumnDescriptor,
                              "",
                              DAP_FIELD(attributeName, "attributeName"),
                              DAP_FIELD(format, "format"),
                              DAP_FIELD(label, "label"),
                              DAP_FIELD(type, "type"),
                              DAP_FIELD(width, "width"));

ExceptionBreakpointsFilter::ExceptionBreakpointsFilter() = default;
ExceptionBreakpointsFilter::~ExceptionBreakpointsFilter() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionBreakpointsFilter,
                              "",
                              DAP_FIELD(def, "default"),
                              DAP_FIELD(filter, "filter"),
                              DAP_FIELD(label, "label"));

Capabilities::Capabilities() = default;
Capabilities::~Capabilities() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(
    Capabilities,
    "",
    DAP_FIELD(additionalModuleColumns, "additionalModuleColumns"),
    DAP_FIELD(completionTriggerCharacters, "completionTriggerCharacters"),
    DAP_FIELD(exceptionBreakpointFilters, "exceptionBreakpointFilters"),
    DAP_FIELD(supportTerminateDebuggee, "supportTerminateDebuggee"),
    DAP_FIELD(supportedChecksumAlgorithms, "supportedChecksumAlgorithms"),
    DAP_FIELD(supportsBreakpointLocationsRequest,
              "supportsBreakpointLocationsRequest"),
    DAP_FIELD(supportsCancelRequest, "supportsCancelRequest"),
    DAP_FIELD(supportsCompletionsRequest, "supportsCompletionsRequest"),
    DAP_FIELD(supportsConditionalBreakpoints, "supportsConditionalBreakpoints"),
    DAP_FIELD(supportsConfigurationDoneRequest,
              "supportsConfigurationDoneRequest"),
    DAP_FIELD(supportsDataBreakpoints, "supportsDataBreakpoints"),
    DAP_FIELD(supportsDelayedStackTraceLoading,
              "supportsDelayedStackTraceLoading"),
    DAP_FIELD(supportsDisassembleRequest, "supportsDisassembleRequest"),
    DAP_FIELD(supportsEvaluateForHovers, "supportsEvaluateForHovers"),
    DAP_FIELD(supportsExceptionInfoRequest, "supportsExceptionInfoRequest"),
    DAP_FIELD(supportsExceptionOptions, "supportsExceptionOptions"),
    DAP_FIELD(supportsFunctionBreakpoints, "supportsFunctionBreakpoints"),
    DAP_FIELD(supportsGotoTargetsRequest, "supportsGotoTargetsRequest"),
    DAP_FIELD(supportsHitConditionalBreakpoints,
              "supportsHitConditionalBreakpoints"),
    DAP_FIELD(supportsLoadedSourcesRequest, "supportsLoadedSourcesRequest"),
    DAP_FIELD(supportsLogPoints, "supportsLogPoints"),
    DAP_FIELD(supportsModulesRequest, "supportsModulesRequest"),
    DAP_FIELD(supportsReadMemoryRequest, "supportsReadMemoryRequest"),
    DAP_FIELD(supportsRestartFrame, "supportsRestartFrame"),
    DAP_FIELD(supportsRestartRequest, "supportsRestartRequest"),
    DAP_FIELD(supportsSetExpression, "supportsSetExpression"),
    DAP_FIELD(supportsSetVariable, "supportsSetVariable"),
    DAP_FIELD(supportsStepBack, "supportsStepBack"),
    DAP_FIELD(supportsStepInTargetsRequest, "supportsStepInTargetsRequest"),
    DAP_FIELD(supportsTerminateRequest, "supportsTerminateRequest"),
    DAP_FIELD(supportsTerminateThreadsRequest,
              "supportsTerminateThreadsRequest"),
    DAP_FIELD(supportsValueFormattingOptions,
              "supportsValueFormattingOptions"));

CompletionItemType::CompletionItemType() = default;
CompletionItemType::~CompletionItemType() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionItemType, "");

CompletionItem::CompletionItem() = default;
CompletionItem::~CompletionItem() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(CompletionItem,
                              "",
                              DAP_FIELD(label, "label"),
                              DAP_FIELD(length, "length"),
                              DAP_FIELD(sortText, "sortText"),
                              DAP_FIELD(start, "start"),
                              DAP_FIELD(text, "text"),
                              DAP_FIELD(type, "type"));

DataBreakpointAccessType::DataBreakpointAccessType() = default;
DataBreakpointAccessType::~DataBreakpointAccessType() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpointAccessType, "");

DisassembledInstruction::DisassembledInstruction() = default;
DisassembledInstruction::~DisassembledInstruction() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(DisassembledInstruction,
                              "",
                              DAP_FIELD(address, "address"),
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(instruction, "instruction"),
                              DAP_FIELD(instructionBytes, "instructionBytes"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(location, "location"),
                              DAP_FIELD(symbol, "symbol"));

Message::Message() = default;
Message::~Message() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Message,
                              "",
                              DAP_FIELD(format, "format"),
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(sendTelemetry, "sendTelemetry"),
                              DAP_FIELD(showUser, "showUser"),
                              DAP_FIELD(url, "url"),
                              DAP_FIELD(urlLabel, "urlLabel"),
                              DAP_FIELD(variables, "variables"));

VariablePresentationHint::VariablePresentationHint() = default;
VariablePresentationHint::~VariablePresentationHint() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(VariablePresentationHint,
                              "",
                              DAP_FIELD(attributes, "attributes"),
                              DAP_FIELD(kind, "kind"),
                              DAP_FIELD(visibility, "visibility"));

ValueFormat::ValueFormat() = default;
ValueFormat::~ValueFormat() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ValueFormat, "", DAP_FIELD(hex, "hex"));

ExceptionBreakMode::ExceptionBreakMode() = default;
ExceptionBreakMode::~ExceptionBreakMode() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionBreakMode, "");

ExceptionDetails::ExceptionDetails() = default;
ExceptionDetails::~ExceptionDetails() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionDetails,
                              "",
                              DAP_FIELD(evaluateName, "evaluateName"),
                              DAP_FIELD(fullTypeName, "fullTypeName"),
                              DAP_FIELD(innerException, "innerException"),
                              DAP_FIELD(message, "message"),
                              DAP_FIELD(stackTrace, "stackTrace"),
                              DAP_FIELD(typeName, "typeName"));

GotoTarget::GotoTarget() = default;
GotoTarget::~GotoTarget() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(GotoTarget,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(instructionPointerReference,
                                        "instructionPointerReference"),
                              DAP_FIELD(label, "label"),
                              DAP_FIELD(line, "line"));

Module::Module() = default;
Module::~Module() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Module,
                              "",
                              DAP_FIELD(addressRange, "addressRange"),
                              DAP_FIELD(dateTimeStamp, "dateTimeStamp"),
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(isOptimized, "isOptimized"),
                              DAP_FIELD(isUserCode, "isUserCode"),
                              DAP_FIELD(name, "name"),
                              DAP_FIELD(path, "path"),
                              DAP_FIELD(symbolFilePath, "symbolFilePath"),
                              DAP_FIELD(symbolStatus, "symbolStatus"),
                              DAP_FIELD(version, "version"));

Scope::Scope() = default;
Scope::~Scope() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Scope,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(expensive, "expensive"),
                              DAP_FIELD(indexedVariables, "indexedVariables"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(name, "name"),
                              DAP_FIELD(namedVariables, "namedVariables"),
                              DAP_FIELD(presentationHint, "presentationHint"),
                              DAP_FIELD(source, "source"),
                              DAP_FIELD(variablesReference,
                                        "variablesReference"));

SourceBreakpoint::SourceBreakpoint() = default;
SourceBreakpoint::~SourceBreakpoint() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(SourceBreakpoint,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(condition, "condition"),
                              DAP_FIELD(hitCondition, "hitCondition"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(logMessage, "logMessage"));

DataBreakpoint::DataBreakpoint() = default;
DataBreakpoint::~DataBreakpoint() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(DataBreakpoint,
                              "",
                              DAP_FIELD(accessType, "accessType"),
                              DAP_FIELD(condition, "condition"),
                              DAP_FIELD(dataId, "dataId"),
                              DAP_FIELD(hitCondition, "hitCondition"));

ExceptionPathSegment::ExceptionPathSegment() = default;
ExceptionPathSegment::~ExceptionPathSegment() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionPathSegment,
                              "",
                              DAP_FIELD(names, "names"),
                              DAP_FIELD(negate, "negate"));

ExceptionOptions::ExceptionOptions() = default;
ExceptionOptions::~ExceptionOptions() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(ExceptionOptions,
                              "",
                              DAP_FIELD(breakMode, "breakMode"),
                              DAP_FIELD(path, "path"));

FunctionBreakpoint::FunctionBreakpoint() = default;
FunctionBreakpoint::~FunctionBreakpoint() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(FunctionBreakpoint,
                              "",
                              DAP_FIELD(condition, "condition"),
                              DAP_FIELD(hitCondition, "hitCondition"),
                              DAP_FIELD(name, "name"));

StackFrame::StackFrame() = default;
StackFrame::~StackFrame() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(StackFrame,
                              "",
                              DAP_FIELD(column, "column"),
                              DAP_FIELD(endColumn, "endColumn"),
                              DAP_FIELD(endLine, "endLine"),
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(instructionPointerReference,
                                        "instructionPointerReference"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(moduleId, "moduleId"),
                              DAP_FIELD(name, "name"),
                              DAP_FIELD(presentationHint, "presentationHint"),
                              DAP_FIELD(source, "source"));

StackFrameFormat::StackFrameFormat() = default;
StackFrameFormat::~StackFrameFormat() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(StackFrameFormat,
                              "",
                              DAP_FIELD(includeAll, "includeAll"),
                              DAP_FIELD(line, "line"),
                              DAP_FIELD(module, "module"),
                              DAP_FIELD(parameterNames, "parameterNames"),
                              DAP_FIELD(parameterTypes, "parameterTypes"),
                              DAP_FIELD(parameterValues, "parameterValues"),
                              DAP_FIELD(parameters, "parameters"));

StepInTarget::StepInTarget() = default;
StepInTarget::~StepInTarget() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(StepInTarget,
                              "",
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(label, "label"));

Thread::Thread() = default;
Thread::~Thread() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Thread,
                              "",
                              DAP_FIELD(id, "id"),
                              DAP_FIELD(name, "name"));

Variable::Variable() = default;
Variable::~Variable() = default;
DAP_IMPLEMENT_STRUCT_TYPEINFO(Variable,
                              "",
                              DAP_FIELD(evaluateName, "evaluateName"),
                              DAP_FIELD(indexedVariables, "indexedVariables"),
                              DAP_FIELD(memoryReference, "memoryReference"),
                              DAP_FIELD(name, "name"),
                              DAP_FIELD(namedVariables, "namedVariables"),
                              DAP_FIELD(presentationHint, "presentationHint"),
                              DAP_FIELD(type, "type"),
                              DAP_FIELD(value, "value"),
                              DAP_FIELD(variablesReference,
                                        "variablesReference"));

}  // namespace dap
