scylla_cql/frame/request/
register.rs1use std::num::TryFromIntError;
2
3use thiserror::Error;
4
5use crate::frame::{
6 frame_errors::CqlRequestSerializationError,
7 request::{RequestOpcode, SerializableRequest},
8 server_event_type::EventType,
9 types,
10};
11
12pub struct Register {
13 pub event_types_to_register_for: Vec<EventType>,
14}
15
16impl SerializableRequest for Register {
17 const OPCODE: RequestOpcode = RequestOpcode::Register;
18
19 fn serialize(&self, buf: &mut Vec<u8>) -> Result<(), CqlRequestSerializationError> {
20 let event_types_list = self
21 .event_types_to_register_for
22 .iter()
23 .map(|event| event.to_string())
24 .collect::<Vec<_>>();
25
26 types::write_string_list(&event_types_list, buf)
27 .map_err(RegisterSerializationError::EventTypesSerialization)?;
28 Ok(())
29 }
30}
31
32#[non_exhaustive]
34#[derive(Error, Debug, Clone)]
35pub enum RegisterSerializationError {
36 #[error("Failed to serialize event types list: {0}")]
38 EventTypesSerialization(TryFromIntError),
39}