scylla_cql/frame/request/
register.rs

1use 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/// An error type returned when serialization of REGISTER request fails.
33#[non_exhaustive]
34#[derive(Error, Debug, Clone)]
35pub enum RegisterSerializationError {
36    /// Failed to serialize event types list.
37    #[error("Failed to serialize event types list: {0}")]
38    EventTypesSerialization(TryFromIntError),
39}