nomap 0.2.1

A parser for the `.map` file format used by Quake 1 & 2 as well as Half-Life 1, implemented using the nom parsing framework.
use {
    crate::{
        Map,
        parse::formats::{
            Format,
            shared::*
        }
    },
    std::fmt::{Display, Formatter, Result}
};

impl Display for Vector3 {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        write!(f, "{} {} {}", self.x, self.y, self.z)
    }
}


impl <TA: Display> Display for Texture<TA> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        write!(f, "{} {}", self.name, self.alignment)
    }
}

impl <TA: Display> Display for Plane<TA> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        for point in self.points.iter() {
            write!(f, "( {} ) ", point)?
        }
        write!(f, "{}", self.texture)
    }
}

impl <TA: Display> Display for Brush<TA> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        writeln!(f, "{{")?;
        for plane in self.planes.iter() {
            writeln!(f, "{}", plane)?
        }
        write!(f, "}}")
    }
}

impl Display for Fields {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        for (key, value) in self.iter() {
            writeln!(f, r#""{}" "{}""#, key, value)?
        }
        Ok(())
    }
}

impl <B: Display> Display for Entity<B> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        writeln!(f, "{{")?;
        write!(f, "{}", self.fields)?;
        for brush in self.brushes.iter() {
            writeln!(f, "{}", brush)?
        }
        write!(f, "}}")
    }
}

impl <F> Display for Map<F>
where
    F: Format,
    F::Entity: Display
{
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        for ent in self.entities.iter() {
            writeln!(f, "{}", ent)?
        }
        Ok(())
    }
}