use crate::error::Error; use crate::pes::pec::{decode_stitches, parse_pec_header}; use crate::types::{ResolvedDesign, StitchCommand}; /// Parse a standalone PEC file (`#PEC0001` prefix + PEC data). pub fn parse(data: &[u8]) -> Result<(Vec, Vec<(u8, u8, u8)>), Error> { if data.len() < 8 || &data[0..8] != b"#PEC0001" { return Err(Error::InvalidHeader("missing #PEC0001 magic".into())); } let pec_data = &data[8..]; let (header, stitch_offset) = parse_pec_header(pec_data)?; let commands = decode_stitches(&pec_data[stitch_offset..])?; // Map PEC palette indices to RGB colors let colors: Vec<(u8, u8, u8)> = header .color_indices .iter() .map(|&idx| crate::palette::pec_color(idx)) .collect(); Ok((commands, colors)) } /// Parse a standalone PEC file and resolve to a renderable design. pub fn parse_and_resolve(data: &[u8]) -> Result { let (commands, colors) = parse(data)?; crate::resolve::resolve(&commands, colors) }