Skip to main content

scylla_cql/frame/request/
register.rs

1//! CQL protocol-level representation of a `REGISTER` request.
2
3use std::num::TryFromIntError;
4
5use thiserror::Error;
6
7use crate::frame::{
8    frame_errors::CqlRequestSerializationError,
9    request::{RequestOpcode, SerializableRequest},
10    server_event_type::{EventType, EventTypeV2},
11    types,
12};
13
14/// The CQL protocol-level representation of an `REGISTER` request,
15/// used to subscribe for server events.
16pub struct Register {
17    /// A list of event types to register for.
18    pub event_types_to_register_for: Vec<EventType>,
19}
20
21/// The CQL protocol-level representation of an `REGISTER` request,
22/// used to subscribe for server events.
23pub struct RegisterV2 {
24    /// A list of event types to register for.
25    pub event_types_to_register_for: Vec<EventTypeV2>,
26}
27
28impl SerializableRequest for Register {
29    const OPCODE: RequestOpcode = RequestOpcode::Register;
30
31    fn serialize(&self, buf: &mut Vec<u8>) -> Result<(), CqlRequestSerializationError> {
32        let event_types_list = self
33            .event_types_to_register_for
34            .iter()
35            .map(|event| event.to_string())
36            .collect::<Vec<_>>();
37
38        types::write_string_list(&event_types_list, buf)
39            .map_err(RegisterSerializationError::EventTypesSerialization)?;
40        Ok(())
41    }
42}
43
44impl SerializableRequest for RegisterV2 {
45    const OPCODE: RequestOpcode = RequestOpcode::Register;
46
47    fn serialize(&self, buf: &mut Vec<u8>) -> Result<(), CqlRequestSerializationError> {
48        let event_types_list = self
49            .event_types_to_register_for
50            .iter()
51            .map(|event| event.to_string())
52            .collect::<Vec<_>>();
53
54        types::write_string_list(&event_types_list, buf)
55            .map_err(RegisterSerializationError::EventTypesSerialization)?;
56        Ok(())
57    }
58}
59
60/// An error type returned when serialization of REGISTER request fails.
61#[non_exhaustive]
62#[derive(Error, Debug, Clone)]
63pub enum RegisterSerializationError {
64    /// Failed to serialize event types list.
65    #[error("Failed to serialize event types list: {0}")]
66    EventTypesSerialization(TryFromIntError),
67}