celesteloader 0.5.2

Code for working with Maps, Assets, and Mods for the game Celeste
Documentation
use anyhow::Result;
use std::path::PathBuf;

#[derive(Debug, PartialEq, Eq)]
pub struct Save {
    i: u32,
    save_dir: PathBuf,
}

impl Ord for Save {
    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
        self.i.cmp(&other.i)
    }
}

impl PartialOrd for Save {
    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
        Some(self.cmp(other))
    }
}

impl Save {
    pub(crate) fn new(save_dir: PathBuf, i: u32) -> Self {
        Save { save_dir, i }
    }

    pub fn index(&self) -> u32 {
        self.i
    }

    pub fn xml<T>(&self, f: impl FnOnce(roxmltree::Document<'_>) -> T) -> Result<T> {
        let data = std::fs::read_to_string(self.save_dir.join(format!("{}.celeste", self.i)))?;
        let document = roxmltree::Document::parse(&data)?;
        let ret = f(document);
        Ok(ret)
    }
}