tiberius/tds/codec/token/
token_sspi.rs

1use crate::{sql_read_bytes::SqlReadBytes, tds::codec::Encode};
2use bytes::BytesMut;
3use futures_util::io::AsyncReadExt;
4
5#[derive(Debug)]
6pub struct TokenSspi(Vec<u8>);
7
8impl AsRef<[u8]> for TokenSspi {
9    fn as_ref(&self) -> &[u8] {
10        self.0.as_ref()
11    }
12}
13
14impl TokenSspi {
15    #[cfg(any(windows, all(unix, feature = "integrated-auth-gssapi")))]
16    pub fn new(bytes: Vec<u8>) -> Self {
17        Self(bytes)
18    }
19
20    pub(crate) async fn decode_async<R>(src: &mut R) -> crate::Result<Self>
21    where
22        R: SqlReadBytes + Unpin,
23    {
24        let len = src.read_u16_le().await? as usize;
25        let mut bytes = vec![0; len];
26        src.read_exact(&mut bytes[0..len]).await?;
27
28        Ok(Self(bytes))
29    }
30}
31
32impl Encode<BytesMut> for TokenSspi {
33    fn encode(self, dst: &mut BytesMut) -> crate::Result<()> {
34        dst.extend(self.0);
35        Ok(())
36    }
37}