#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[repr(u8)]
pub enum Block {
Image = 0x2C,
Extension = 0x21,
Trailer = 0x3B,
}
impl Block {
pub fn from_u8(n: u8) -> Option<Block> {
match n {
0x2C => Some(Block::Image),
0x21 => Some(Block::Extension),
0x3B => Some(Block::Trailer),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct AnyExtension(pub u8);
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[repr(u8)]
pub enum Extension {
Text = 0x01,
Control = 0xF9,
Comment = 0xFE,
Application = 0xFF,
}
impl From<Extension> for AnyExtension {
fn from(ext: Extension) -> Self {
AnyExtension(ext as u8)
}
}
impl Extension {
pub fn from_u8(n: u8) -> Option<Extension> {
match n {
0x01 => Some(Extension::Text),
0xF9 => Some(Extension::Control),
0xFE => Some(Extension::Comment),
0xFF => Some(Extension::Application),
_ => None,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct Frame {
pub top: u16,
pub left: u16,
pub width: u16,
pub height: u16,
pub is_interlaced: bool,
pub was_interlaced: bool,
}