use zenoh_buffers::ZSlice;
use crate::core::Reliability;
pub use crate::transport::TransportSn;
pub mod flag {
pub const R: u8 = 1 << 5; pub const M: u8 = 1 << 6; pub const Z: u8 = 1 << 7; }
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Fragment {
pub reliability: Reliability,
pub more: bool,
pub sn: TransportSn,
pub payload: ZSlice,
pub ext_qos: ext::QoSType,
pub ext_first: Option<ext::First>,
pub ext_drop: Option<ext::Drop>,
}
pub mod ext {
use crate::{zextunit, zextz64};
pub type QoS = zextz64!(0x1, true);
pub type QoSType = crate::transport::ext::QoSType<{ QoS::ID }>;
pub type First = zextunit!(0x2, false);
pub type Drop = zextunit!(0x3, false);
}
impl Fragment {
#[cfg(feature = "test")]
#[doc(hidden)]
pub fn rand() -> Self {
use rand::Rng;
let mut rng = rand::thread_rng();
let reliability = Reliability::rand();
let more = rng.gen_bool(0.5);
let sn: TransportSn = rng.gen();
let payload = ZSlice::rand(rng.gen_range(8..128));
let ext_qos = ext::QoSType::rand();
let ext_first = rng.gen_bool(0.5).then(ext::First::rand);
let ext_drop = rng.gen_bool(0.5).then(ext::Drop::rand);
Fragment {
reliability,
sn,
more,
payload,
ext_qos,
ext_first,
ext_drop,
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct FragmentHeader {
pub reliability: Reliability,
pub more: bool,
pub sn: TransportSn,
pub ext_qos: ext::QoSType,
pub ext_first: Option<ext::First>,
pub ext_drop: Option<ext::Drop>,
}
impl FragmentHeader {
#[cfg(feature = "test")]
#[doc(hidden)]
pub fn rand() -> Self {
use rand::Rng;
let mut rng = rand::thread_rng();
let reliability = Reliability::rand();
let more = rng.gen_bool(0.5);
let sn: TransportSn = rng.gen();
let ext_qos = ext::QoSType::rand();
let ext_first = rng.gen_bool(0.5).then(ext::First::rand);
let ext_drop = rng.gen_bool(0.5).then(ext::Drop::rand);
FragmentHeader {
reliability,
more,
sn,
ext_qos,
ext_first,
ext_drop,
}
}
}