pub struct Marker;
#[allow(dead_code)]
impl Marker {
pub const RST0: u16 = 0xffd0;
pub const RST7: u16 = 0xffd7;
pub const SOI: u16 = 0xffd8;
pub const EOI: u16 = 0xffd9;
pub const SOS: u16 = 0xffda;
pub const DRI: u16 = 0xffdd;
pub const APP0: u16 = 0xffe0;
pub const APP1: u16 = 0xffe1;
pub const APP2: u16 = 0xffe2;
pub const APP3: u16 = 0xffe3;
pub const APP4: u16 = 0xffe4;
pub const APP5: u16 = 0xffe5;
pub const APP6: u16 = 0xffe6;
pub const APP7: u16 = 0xffe7;
pub const APP8: u16 = 0xffe8;
pub const APP9: u16 = 0xffe9;
pub const APP10: u16 = 0xffea;
pub const APP11: u16 = 0xffeb;
pub const APP12: u16 = 0xffec;
pub const APP13: u16 = 0xffed;
pub const APP14: u16 = 0xffee;
pub const APP15: u16 = 0xffef;
pub const COM: u16 = 0xfffe;
}
impl Marker {
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_valid(value: &u16) -> bool {
(*value & 0xff00) == 0xff00
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Chunk {
pub data: Vec<u8>,
pub size: usize,
pub remaining: usize,
}
impl Chunk {
#[allow(clippy::cast_possible_truncation)]
pub fn build(((marker, bytes), remaining): ((u16, &[u8]), usize)) -> Self {
let payload_size = bytes.len();
let mut data: Vec<u8> = Vec::with_capacity(payload_size + 4);
data.extend(marker.to_be_bytes());
if payload_size > 0 {
let length = payload_size as u16 + 2;
data.extend(length.to_be_bytes());
data.append(&mut bytes.to_vec());
}
Self {
data,
size: payload_size + 4,
remaining,
}
}
}