scylla_cql/frame/request/
startup.rs

1use thiserror::Error;
2
3use crate::frame::frame_errors::CqlRequestSerializationError;
4
5use std::{borrow::Cow, collections::HashMap, num::TryFromIntError};
6
7use crate::{
8    frame::request::{RequestOpcode, SerializableRequest},
9    frame::types,
10};
11
12pub struct Startup<'a> {
13    pub options: HashMap<Cow<'a, str>, Cow<'a, str>>,
14}
15
16impl SerializableRequest for Startup<'_> {
17    const OPCODE: RequestOpcode = RequestOpcode::Startup;
18
19    fn serialize(&self, buf: &mut Vec<u8>) -> Result<(), CqlRequestSerializationError> {
20        types::write_string_map(&self.options, buf)
21            .map_err(StartupSerializationError::OptionsSerialization)?;
22        Ok(())
23    }
24}
25
26/// An error type returned when serialization of STARTUP request fails.
27#[non_exhaustive]
28#[derive(Error, Debug, Clone)]
29pub enum StartupSerializationError {
30    /// Failed to serialize startup options.
31    #[error("Malformed startup options: {0}")]
32    OptionsSerialization(TryFromIntError),
33}