rl2tp/message/avp/types/
proxy_authen_challenge.rs1use 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}