rl2tp/message/avp/types/
proxy_authen_challenge.rs

1use crate::avp::{QueryableAVP, WritableAVP};
2use crate::common::{DecodeError, DecodeResult, Reader, Writer};
3use core::borrow::Borrow;
4
5#[derive(Clone, Debug, Eq, PartialEq)]
6pub struct ProxyAuthenChallenge {
7    pub value: Vec<u8>,
8}
9
10impl ProxyAuthenChallenge {
11    const ATTRIBUTE_TYPE: u16 = 31;
12
13    #[inline]
14    pub fn try_read<T: Borrow<[u8]>>(reader: &mut impl Reader<T>) -> DecodeResult<Self> {
15        if reader.is_empty() {
16            return Err(DecodeError::IncompleteAVP(Self::ATTRIBUTE_TYPE));
17        }
18
19        Ok(Self {
20            value: reader
21                .bytes(reader.len())
22                .ok_or(DecodeError::AVPReadError(Self::ATTRIBUTE_TYPE))?
23                .borrow()
24                .to_owned(),
25        })
26    }
27}
28
29impl From<Vec<u8>> for ProxyAuthenChallenge {
30    fn from(value: Vec<u8>) -> Self {
31        Self { value }
32    }
33}
34
35impl From<ProxyAuthenChallenge> for Vec<u8> {
36    fn from(value: ProxyAuthenChallenge) -> Self {
37        value.value
38    }
39}
40
41impl QueryableAVP for ProxyAuthenChallenge {
42    #[inline]
43    fn get_length(&self) -> usize {
44        self.value.len()
45    }
46}
47
48impl WritableAVP for ProxyAuthenChallenge {
49    #[inline]
50    fn write(&self, writer: &mut impl Writer) {
51        writer.write_u16_be(Self::ATTRIBUTE_TYPE);
52        writer.write_bytes(&self.value);
53    }
54}