xref: /webrtc/sctp/src/chunk/chunk_unknown.rs (revision ffe74184)
1 use crate::chunk::chunk_header::{ChunkHeader, CHUNK_HEADER_SIZE};
2 use crate::chunk::Chunk;
3 use bytes::{Bytes, BytesMut};
4 use std::any::Any;
5 use std::fmt::{Debug, Display, Formatter};
6 
7 #[derive(Clone, Debug)]
8 pub struct ChunkUnknown {
9     hdr: ChunkHeader,
10     value: Bytes,
11 }
12 
13 impl Display for ChunkUnknown {
fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result14     fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
15         write!(f, "ChunkUnknown( {} {:?} )", self.hdr, self.value)
16     }
17 }
18 
19 impl Chunk for ChunkUnknown {
header(&self) -> ChunkHeader20     fn header(&self) -> ChunkHeader {
21         self.hdr.clone()
22     }
23 
as_any(&self) -> &(dyn Any + Send + Sync)24     fn as_any(&self) -> &(dyn Any + Send + Sync) {
25         self
26     }
27 
check(&self) -> crate::error::Result<()>28     fn check(&self) -> crate::error::Result<()> {
29         Ok(())
30     }
31 
value_length(&self) -> usize32     fn value_length(&self) -> usize {
33         self.value.len()
34     }
35 
marshal_to(&self, buf: &mut BytesMut) -> crate::error::Result<usize>36     fn marshal_to(&self, buf: &mut BytesMut) -> crate::error::Result<usize> {
37         self.header().marshal_to(buf)?;
38         buf.extend(&self.value);
39         Ok(buf.len())
40     }
41 
unmarshal(raw: &Bytes) -> crate::error::Result<Self> where Self: Sized,42     fn unmarshal(raw: &Bytes) -> crate::error::Result<Self>
43     where
44         Self: Sized,
45     {
46         let header = ChunkHeader::unmarshal(raw)?;
47         let len = header.value_length();
48         Ok(Self {
49             hdr: header,
50             value: raw.slice(CHUNK_HEADER_SIZE..CHUNK_HEADER_SIZE + len),
51         })
52     }
53 }
54