tiberius/tds/codec/token/token_row/
bytes_mut_with_data_columns.rs

1use crate::MetaDataColumn;
2use bytes::buf::UninitSlice;
3use bytes::{BufMut, BytesMut};
4use std::borrow::{Borrow, BorrowMut};
5use std::ops::{Deref, DerefMut};
6
7pub(crate) struct BytesMutWithDataColumns<'a> {
8    bytes: &'a mut BytesMut,
9    data_columns: &'a Vec<MetaDataColumn<'a>>,
10}
11
12impl<'a> BytesMutWithDataColumns<'a> {
13    pub fn new(bytes: &'a mut BytesMut, data_columns: &'a Vec<MetaDataColumn<'a>>) -> Self {
14        BytesMutWithDataColumns {
15            bytes,
16            data_columns,
17        }
18    }
19
20    pub fn data_columns(&self) -> &'a Vec<MetaDataColumn<'a>> {
21        self.data_columns
22    }
23}
24
25unsafe impl<'a> BufMut for BytesMutWithDataColumns<'a> {
26    fn remaining_mut(&self) -> usize {
27        self.bytes.remaining_mut()
28    }
29
30    unsafe fn advance_mut(&mut self, cnt: usize) {
31        self.bytes.advance_mut(cnt)
32    }
33
34    fn chunk_mut(&mut self) -> &mut UninitSlice {
35        self.bytes.chunk_mut()
36    }
37}
38
39impl<'a> Borrow<[u8]> for BytesMutWithDataColumns<'a> {
40    fn borrow(&self) -> &[u8] {
41        self.bytes.deref()
42    }
43}
44
45impl<'a> BorrowMut<[u8]> for BytesMutWithDataColumns<'a> {
46    fn borrow_mut(&mut self) -> &mut [u8] {
47        self.bytes.borrow_mut()
48    }
49}
50
51impl<'a> Deref for BytesMutWithDataColumns<'a> {
52    type Target = BytesMut;
53
54    fn deref(&self) -> &Self::Target {
55        self.bytes
56    }
57}
58
59impl<'a> DerefMut for BytesMutWithDataColumns<'a> {
60    fn deref_mut(&mut self) -> &mut Self::Target {
61        self.bytes
62    }
63}