scylla_cql/frame/request/
register.rs1use 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
14pub struct Register {
17 pub event_types_to_register_for: Vec<EventType>,
19}
20
21pub struct RegisterV2 {
24 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#[non_exhaustive]
62#[derive(Error, Debug, Clone)]
63pub enum RegisterSerializationError {
64 #[error("Failed to serialize event types list: {0}")]
66 EventTypesSerialization(TryFromIntError),
67}