use std::io;
pub struct Paldat {
data: Vec<u8>,
}
pub const PALETTE_SIZE_IN_BYTES: usize = 768;
impl Paldat {
pub fn load<T: io::Read>(mut reader: T) -> Option<Paldat> {
let mut data = Vec::new();
reader.read_to_end(&mut data).unwrap();
if data.len() % PALETTE_SIZE_IN_BYTES != 0 {
None
} else {
Some(Paldat { data })
}
}
pub fn palettes(&self) -> usize {
self.data.len() / PALETTE_SIZE_IN_BYTES
}
pub fn palette_data(&self, palette: usize) -> &[u8] {
&self.data[palette * PALETTE_SIZE_IN_BYTES..(palette + 1) * PALETTE_SIZE_IN_BYTES]
}
}
#[cfg(test)]
mod tests {
use crate::paldat::Paldat;
#[test]
fn test_paldat_loading_works() {
let data: Vec<u8> = (0..(768 as u16 * 2)).map(|v| (v >> 3) as u8).collect();
let paldat = Paldat::load(&data[..]).unwrap();
assert_eq!(paldat.palettes(), 2);
assert_eq!(paldat.palette_data(0), &data[0..768]);
assert_eq!(paldat.palette_data(1), &data[768..768 * 2]);
}
}