Skip to main content

dap/
base_message.rs

1#[cfg(feature = "client")]
2use serde::Deserialize;
3use serde::Serialize;
4
5use crate::{events::Event, responses::Response, reverse_requests::ReverseRequest};
6
7/// Represents the base protocol message, in which all other messages are wrapped.
8///
9/// Specification: [Response](https://microsoft.github.io/debug-adapter-protocol/specification)
10#[cfg_attr(feature = "client", derive(Deserialize))]
11#[derive(Serialize, Debug)]
12#[serde(rename_all = "camelCase")]
13pub struct BaseMessage {
14    /// Sequence number of the message. The `seq` for
15    /// the first message is 1, and for each message is incremented by 1.
16    pub seq: i64,
17    #[serde(flatten)]
18    pub message: Sendable,
19}
20
21#[cfg_attr(feature = "client", derive(Deserialize))]
22#[derive(Serialize, Debug)]
23#[serde(rename_all = "camelCase")]
24#[serde(tag = "type")]
25pub enum Sendable {
26    Response(Response),
27    Event(Event),
28    ReverseRequest(ReverseRequest),
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn test_message_serialize() {
37        let message = BaseMessage {
38            seq: 10,
39            message: Sendable::Event(Event::Initialized),
40        };
41        let json = serde_json::to_string(&message).unwrap();
42
43        let expected = "{\"seq\":10,\"type\":\"event\",\"event\":\"initialized\"}";
44        assert_eq!(json, expected);
45    }
46}