eu4save 0.8.2

Ergonomically work with all EU4 saves (ironman and multiplayer)
Documentation
use serde::{
    de::{self, SeqAccess},
    Deserializer,
};
use std::fmt;
use std::marker::PhantomData;

pub(crate) fn deserialize_vec_overflow_byte<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
where
    D: Deserializer<'de>,
{
    struct VecPairVisitor {
        marker: PhantomData<Vec<u8>>,
    }

    impl<'de> de::Visitor<'de> for VecPairVisitor {
        type Value = Vec<u8>;

        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
            formatter.write_str("a seq of bytes allowed to overflow")
        }

        fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
        where
            A: SeqAccess<'de>,
        {
            let mut v = if let Some(size) = seq.size_hint() {
                Vec::with_capacity(size)
            } else {
                Vec::new()
            };

            while let Some(x) = seq.next_element::<u16>()? {
                v.push(x as u8)
            }

            Ok(v)
        }
    }

    deserializer.deserialize_seq(VecPairVisitor {
        marker: PhantomData,
    })
}