tiberius/tds/codec/token/token_row/
bytes_mut_with_data_columns.rs1use 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}