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}