cassandra_protocol/frame/
message_event.rs1use 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 0, 15, 84, 79, 80, 79, 76, 79, 71, 89, 95, 67, 72, 65, 78, 71, 69, 0, 8, 78, 69, 87, 95, 78, 79, 68, 69, 4, 127, 0, 0, 1, 0, 0, 0, 1, ];
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}