hoi4save 0.1.0

Ergonomically work with HOI4 saves
Documentation
use jomini::{BinaryFlavor, Encoding, Utf8Encoding};

pub struct Hoi4Flavor;

impl Encoding for Hoi4Flavor {
    fn decode<'a>(&self, data: &'a [u8]) -> std::borrow::Cow<'a, str> {
        Utf8Encoding::decode(data)
    }
}

impl BinaryFlavor for Hoi4Flavor {
    fn visit_f32_1(&self, data: &[u8]) -> f32 {
        (le_i32(data) as f32) / 1000.0
    }

    fn visit_f32_2(&self, data: &[u8]) -> f32 {
        let val = le_i32(data) as f32 / 32768.0;
        (val * 10_0000.0).floor() / 10_0000.0
    }
}

#[inline]
pub(crate) fn le_i32(data: &[u8]) -> i32 {
    let ptr = data.as_ptr() as *const u8 as *const i32;
    unsafe { ::std::ptr::read_unaligned(ptr).to_le() }
}