use crate::col_peek_version::peek_version;
use crate::{
FontAtlas, FormatError, FONT_ATLAS_MIN_SUPPORTED, FONT_ATLAS_VERSION, MAX_SERIALIZED_BYTES,
};
pub fn read_font_atlas(bytes: &[u8]) -> Result<FontAtlas, FormatError> {
if bytes.len() > MAX_SERIALIZED_BYTES {
return Err(FormatError::PayloadTooLarge {
len: bytes.len(),
max: MAX_SERIALIZED_BYTES,
});
}
let version = peek_version(bytes);
if let Some(found) = version {
check_version(found)?;
}
let atlas: FontAtlas =
rmp_serde::from_slice(bytes).map_err(|err| FormatError::Decode(err.to_string()))?;
check_version(atlas.version)?;
atlas.validate()?;
Ok(atlas)
}
fn check_version(found: u8) -> Result<(), FormatError> {
if !(FONT_ATLAS_MIN_SUPPORTED..=FONT_ATLAS_VERSION).contains(&found) {
return Err(FormatError::UnsupportedVersion {
format: "font atlas",
found,
min_supported: FONT_ATLAS_MIN_SUPPORTED,
current: FONT_ATLAS_VERSION,
});
}
Ok(())
}