mm_client_common/
packet.rs1mod ring;
6use std::collections::VecDeque;
7
8pub(crate) use ring::*;
9
10#[derive(Debug, Clone, uniffi::Object)]
11pub struct Packet {
12 pub(crate) pts: u64,
13 pub(crate) seq: u64,
14 pub(crate) stream_seq: u64,
15 pub(crate) hierarchical_layer: u32,
16 data: VecDeque<bytes::Bytes>,
17}
18
19#[derive(Debug, Clone, uniffi::Record)]
20pub struct DroppedPacket {
21 pub pts: u64,
22 pub seq: u64,
23 pub stream_seq: u64,
24 pub hierarchical_layer: u32,
25}
26
27#[uniffi::export]
28impl Packet {
29 pub fn pts(&self) -> u64 {
30 self.pts
31 }
32
33 pub fn stream_seq(&self) -> u64 {
34 self.stream_seq
35 }
36
37 pub fn seq(&self) -> u64 {
38 self.seq
39 }
40
41 pub fn hierarchical_layer(&self) -> u32 {
42 self.hierarchical_layer
43 }
44
45 pub fn data(&self) -> Vec<u8> {
46 if self.data.len() == 1 {
47 self.data[0].to_vec()
48 } else {
49 use bytes::buf::BufMut;
50
51 let mut buf = Vec::with_capacity(self.len());
52 for chunk in self.data.iter() {
53 buf.put(chunk.clone());
54 }
55
56 buf
57 }
58 }
59}
60
61impl Packet {
62 pub fn len(&self) -> usize {
63 self.data.iter().map(|c| c.len()).sum()
64 }
65
66 pub fn is_empty(&self) -> bool {
67 self.len() == 0
68 }
69
70 pub fn copy_to_slice(&self, mut dst: &mut [u8]) {
72 use bytes::buf::BufMut;
73
74 for chunk in self.data.iter() {
75 dst.put(chunk.clone());
76 }
77 }
78}