mrg 0.1.0

Deserialize Gravity Defied **levels.mrg** files
Documentation
use super::reader::Reader;
use crate::{Difficulty, Track};
use anyhow::Result;

impl Difficulty {
    pub fn from_reader(reader: &mut Reader) -> Result<Self> {
        let track_count = reader.read_int()?;

        let mut tracks: Vec<Track> = Vec::new();

        for _ in 0..track_count {
            let Ok(offset) = reader.read_int() else { break };

            let mut name: Vec<u8> = Vec::new();
            loop {
                let byte = reader.read_byte()?;

                if byte == 0x00 {
                    break;
                }

                name.push(byte.try_into().unwrap());
            }

            let name = String::from_utf8_lossy(&name).to_string();
            tracks.push(Track::new(reader, name, offset.try_into().unwrap())?);
        }

        Ok(Self { tracks })
    }
}