scylla_cql/frame/request/
execute.rs1use std::num::TryFromIntError;
2
3use crate::frame::frame_errors::CqlRequestSerializationError;
4use bytes::Bytes;
5use thiserror::Error;
6
7use crate::{
8 frame::request::{query, RequestOpcode, SerializableRequest},
9 frame::types,
10};
11
12use super::{
13 query::{QueryParameters, QueryParametersSerializationError},
14 DeserializableRequest, RequestDeserializationError,
15};
16
17#[cfg_attr(test, derive(Debug, PartialEq, Eq))]
18pub struct Execute<'a> {
19 pub id: Bytes,
20 pub parameters: query::QueryParameters<'a>,
21}
22
23impl SerializableRequest for Execute<'_> {
24 const OPCODE: RequestOpcode = RequestOpcode::Execute;
25
26 fn serialize(&self, buf: &mut Vec<u8>) -> Result<(), CqlRequestSerializationError> {
27 types::write_short_bytes(&self.id[..], buf)
29 .map_err(ExecuteSerializationError::StatementIdSerialization)?;
30
31 self.parameters
33 .serialize(buf)
34 .map_err(ExecuteSerializationError::QueryParametersSerialization)?;
35 Ok(())
36 }
37}
38
39impl DeserializableRequest for Execute<'_> {
40 fn deserialize(buf: &mut &[u8]) -> Result<Self, RequestDeserializationError> {
41 let id = types::read_short_bytes(buf)?.to_vec().into();
42 let parameters = QueryParameters::deserialize(buf)?;
43
44 Ok(Self { id, parameters })
45 }
46}
47
48#[non_exhaustive]
50#[derive(Error, Debug, Clone)]
51pub enum ExecuteSerializationError {
52 #[error("Malformed query parameters: {0}")]
54 QueryParametersSerialization(QueryParametersSerializationError),
55
56 #[error("Malformed statement id: {0}")]
58 StatementIdSerialization(TryFromIntError),
59}