idmangler-lib 0.6.0

Library for encoding and decoding Wynntils id strings
Documentation
use idmangler_lib::{
    block::PowderData,
    encoding::{DataDecoder, DataEncoder},
    types::{Element, EncodingVersion, Powder},
};

#[test]
fn powderdata_roundtrip() {
    let mut out = Vec::new();
    let mut pow = Vec::new();

    for i in 0..51 {
        pow.push((Element::Air, (i % 6) + 1));
        pow.push((Element::Earth, (i % 6) + 1));
        pow.push((Element::Fire, (i % 6) + 1));
        pow.push((Element::Thunder, (i % 6) + 1));
        pow.push((Element::Water, (i % 6) + 1));
    }

    let powders = PowderData {
        powder_slots: 123,
        powders: pow
            .into_iter()
            .map(|e| Powder::try_from(e).unwrap())
            .collect(),
    };

    powders.encode(EncodingVersion::V1, &mut out).unwrap();

    let mut iter = out.iter().copied().skip(1);
    let decoded = PowderData::decode_data(&mut iter, EncodingVersion::V1).unwrap();

    assert_eq!(powders, decoded);
}