cassandra_protocol/frame/
message_event.rs

1use crate::error;
2use crate::frame::events::ServerEvent;
3use crate::frame::Serialize;
4use crate::frame::{FromCursor, Version};
5use std::io::Cursor;
6
7#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
8pub struct BodyResEvent {
9    pub event: ServerEvent,
10}
11
12impl Serialize for BodyResEvent {
13    fn serialize(&self, cursor: &mut Cursor<&mut Vec<u8>>, version: Version) {
14        self.event.serialize(cursor, version);
15    }
16}
17
18impl FromCursor for BodyResEvent {
19    fn from_cursor(cursor: &mut Cursor<&[u8]>, version: Version) -> error::Result<BodyResEvent> {
20        let event = ServerEvent::from_cursor(cursor, version)?;
21        Ok(BodyResEvent { event })
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::frame::events::*;
29    use crate::frame::traits::FromCursor;
30    use std::io::Cursor;
31
32    #[test]
33    fn body_res_event() {
34        let bytes = &[
35            // TOPOLOGY_CHANGE
36            0, 15, 84, 79, 80, 79, 76, 79, 71, 89, 95, 67, 72, 65, 78, 71, 69, // NEW_NODE
37            0, 8, 78, 69, 87, 95, 78, 79, 68, 69, //
38            4, 127, 0, 0, 1, 0, 0, 0, 1, // inet - 127.0.0.1:1
39        ];
40        let expected = ServerEvent::TopologyChange(TopologyChange {
41            change_type: TopologyChangeType::NewNode,
42            addr: "127.0.0.1:1".parse().unwrap(),
43        });
44
45        {
46            let mut cursor: Cursor<&[u8]> = Cursor::new(bytes);
47            let event = BodyResEvent::from_cursor(&mut cursor, Version::V4)
48                .unwrap()
49                .event;
50            assert_eq!(event, expected);
51        }
52
53        {
54            let mut buffer = Vec::new();
55            let mut cursor = Cursor::new(&mut buffer);
56            expected.serialize(&mut cursor, Version::V4);
57            assert_eq!(buffer, bytes);
58        }
59    }
60}