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