tacacs_plus_protocol/
owned.rs1use super::DeserializeError;
2use super::PacketType;
3use super::{sealed::Sealed, Deserialize, PacketBody};
4
5pub trait FromBorrowedBody: Sealed {
12 type Borrowed<'b>: PacketBody;
14
15 fn from_borrowed(borrowed: &Self::Borrowed<'_>) -> Self;
17}
18
19impl<'b, B: FromBorrowedBody> Deserialize<'b> for B
20where
21 B::Borrowed<'b>: Deserialize<'b>,
22{
23 fn deserialize_from_buffer(buffer: &'b [u8]) -> Result<Self, DeserializeError> {
24 let borrowed = <B as FromBorrowedBody>::Borrowed::deserialize_from_buffer(buffer)?;
25 Ok(Self::from_borrowed(&borrowed))
26 }
27}
28
29impl<B: FromBorrowedBody> PacketBody for B {
33 const TYPE: PacketType = <<B as FromBorrowedBody>::Borrowed<'_> as PacketBody>::TYPE;
34 const REQUIRED_FIELDS_LENGTH: usize =
35 <<B as FromBorrowedBody>::Borrowed<'_> as PacketBody>::REQUIRED_FIELDS_LENGTH;
36}