cassandra_proto/frame/
frame_register.rs

1use rand;
2
3use crate::frame::*;
4use crate::frame::events::SimpleServerEvent;
5use crate::types::{CString, CStringList};
6
7/// The structure which represents a body of a frame of type `options`.
8pub struct BodyReqRegister {
9    pub events: Vec<SimpleServerEvent>,
10}
11
12impl IntoBytes for BodyReqRegister {
13    fn into_cbytes(&self) -> Vec<u8> {
14        let events_string_list =
15            CStringList { list: self.events.iter()
16                                    .map(|event| CString::new(event.as_string()))
17                                    .collect(), };
18        events_string_list.into_cbytes()
19    }
20}
21
22// Frame implementation related to BodyReqRegister
23
24impl Frame {
25    /// Creates new frame of type `REGISTER`.
26    pub fn new_req_register(events: Vec<SimpleServerEvent>) -> Frame {
27        let version = Version::Request;
28        let flag = Flag::Ignore;
29        let stream = rand::random::<u16>();
30        let opcode = Opcode::Register;
31        let register_body = BodyReqRegister { events: events };
32
33        Frame { version: version,
34                flags: vec![flag],
35                stream: stream,
36                opcode: opcode,
37                body: register_body.into_cbytes(),
38                // for request frames it's always None
39                tracing_id: None,
40                warnings: vec![], }
41    }
42}