tiled 0.15.0

A rust crate for loading maps created by the Tiled editor
Documentation
use std::path::Path;

use xml::{reader::XmlEvent, EventReader};

use crate::{Error, ResourceCache, ResourceReader, Result, Tileset};

pub fn parse_tileset(
    path: &Path,
    reader: &mut impl ResourceReader,
    cache: &mut impl ResourceCache,
) -> Result<Tileset> {
    let mut tileset_parser =
        EventReader::new(
            reader
                .read_from(path)
                .map_err(|err| Error::ResourceLoadingError {
                    path: path.to_owned(),
                    err: Box::new(err),
                })?,
        );
    loop {
        match tileset_parser.next().map_err(Error::XmlDecodingError)? {
            XmlEvent::StartElement {
                name, attributes, ..
            } if name.local_name == "tileset" => {
                return Tileset::parse_external_tileset(
                    &mut tileset_parser.into_iter(),
                    &attributes,
                    path,
                    reader,
                    cache,
                );
            }
            XmlEvent::EndDocument => {
                return Err(Error::PrematureEnd(
                    "Tileset Document ended before map was parsed".to_string(),
                ))
            }
            _ => {}
        }
    }
}