use std::fmt; use crate::geometry::Direction; use crate::geometry::Point2d; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum Command { Move(Point2d), Dig(Point2d), Shoot(Direction), DoNothing, } impl fmt::Display for Command { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { use Command::*; match self { Move(p) => write!(f, "move {} {}", p.x, p.y), Dig(p) => write!(f, "dig {} {}", p.x, p.y), Shoot(dir) => write!(f, "shoot {}", dir), DoNothing => write!(f, "nothing"), } } }