use crate::prelude::*;
use crate::wad::deserialize::reader::DataReader;
use crate::wad::elements::GMElement;
use crate::wad::serialize::builder::DataBuilder;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Kerning {
pub character: char,
pub shift_modifier: i16,
}
impl GMElement for Kerning {
fn deserialize(reader: &mut DataReader) -> Result<Self> {
let character = reader.read_u16()?;
if character == 0 {
bail!("Character not set (code point is zero)");
}
let character: char = char::from_u32(character.into()).ok_or_else(|| {
format!("Invalid UTF-8 character with code point {character} (0x{character:04X})")
})?;
let shift_modifier = reader.read_i16()?;
Ok(Self { character, shift_modifier })
}
fn serialize(&self, builder: &mut DataBuilder) -> Result<()> {
builder.write_u16(u32::from(self.character) as u16);
builder.write_i16(self.shift_modifier);
Ok(())
}
}