tiberius/tds/codec/
batch_request.rs

1use super::{AllHeaderTy, Encode, ALL_HEADERS_LEN_TX};
2use bytes::{BufMut, BytesMut};
3use std::borrow::Cow;
4
5pub struct BatchRequest<'a> {
6    queries: Cow<'a, str>,
7    transaction_descriptor: [u8; 8],
8}
9
10impl<'a> BatchRequest<'a> {
11    pub fn new(queries: impl Into<Cow<'a, str>>, transaction_descriptor: [u8; 8]) -> Self {
12        Self {
13            queries: queries.into(),
14            transaction_descriptor,
15        }
16    }
17}
18
19impl<'a> Encode<BytesMut> for BatchRequest<'a> {
20    fn encode(self, dst: &mut BytesMut) -> crate::Result<()> {
21        dst.put_u32_le(ALL_HEADERS_LEN_TX as u32);
22        dst.put_u32_le(ALL_HEADERS_LEN_TX as u32 - 4);
23        dst.put_u16_le(AllHeaderTy::TransactionDescriptor as u16);
24        dst.put_slice(&self.transaction_descriptor);
25        dst.put_u32_le(1);
26
27        for c in self.queries.encode_utf16() {
28            dst.put_u16_le(c);
29        }
30
31        Ok(())
32    }
33}