sokoban-elements 0.2.1

Parsing and writing Sokoban, Hexoban, Trioban and Octoban file formats.
Documentation
use super::{BoxID, GoalID, PusherID};
use crate::PlusID;

/// Pusher on game board.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Pusher {
    pub id: PusherID,
    pub x:  usize,
    pub y:  usize,
}

/// Box (crate, container) on game board.
///
/// Yes, Rust already has a `Box` type.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Boxbox {
    pub id:      BoxID,
    pub x:       usize,
    pub y:       usize,
    pub plus_id: Option<PlusID>,
}

/// Goal on game board.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Goal {
    pub id:      GoalID,
    pub x:       usize,
    pub y:       usize,
    pub plus_id: Option<PlusID>,
}