minecraft-command-types 0.1.0

Provides an AST like structure for Minecraft commands.
Documentation
use crate::coordinate::Coordinates;
use crate::entity_selector::EntitySelector;
use minecraft_command_types_derive::HasMacro;
use std::fmt::{Display, Formatter};

#[derive(Debug, Clone, Eq, PartialEq, Hash, HasMacro)]
pub enum DamageType {
    At(Coordinates),
    By(EntitySelector, Option<EntitySelector>),
}

impl Display for DamageType {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            DamageType::At(coordinates) => write!(f, "at {}", coordinates),
            DamageType::By(by, from) => {
                write!(f, "by {}", by)?;

                if let Some(from) = from {
                    write!(f, " from {}", from)?;
                }

                Ok(())
            }
        }
    }
}