feat: Add optional map serialization.

This commit is contained in:
Nolan Darilek 2023-02-22 10:41:49 -06:00
parent 25518879d9
commit f02e263749
3 changed files with 13 additions and 1 deletions

View File

@ -11,6 +11,7 @@ edition = "2021"
[dependencies] [dependencies]
rand = "0.8" rand = "0.8"
serde = { version = "1", optional = true, features = ["derive"]}
[package.metadata.release] [package.metadata.release]
publish = false publish = false

View File

@ -1,8 +1,12 @@
//! Support function for 2D geometry //! Support function for 2D geometry
//! //!
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
/// Position on the map /// Position on the map
#[derive(Default, PartialEq, Copy, Clone, Debug, Eq, Hash)] #[derive(Default, PartialEq, Copy, Clone, Debug, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct Point { pub struct Point {
pub x: usize, pub x: usize,
pub y: usize, pub y: usize,
@ -29,6 +33,7 @@ impl Point {
/// Rectangle region on the map /// Rectangle region on the map
#[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)] #[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct Rect { pub struct Rect {
pub x1: usize, pub x1: usize,
pub x2: usize, pub x2: usize,

View File

@ -7,10 +7,15 @@
//! specific game. //! specific game.
//! //!
use super::geometry::{usize_abs, Point, Rect};
use std::fmt; use std::fmt;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::geometry::{usize_abs, Point, Rect};
#[derive(PartialEq, Copy, Clone, Debug, Eq, Hash)] #[derive(PartialEq, Copy, Clone, Debug, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct Tile { pub struct Tile {
is_blocked: bool, is_blocked: bool,
index: usize, index: usize,
@ -30,6 +35,7 @@ pub struct NoData;
/// Map data /// Map data
#[derive(Default, Clone)] #[derive(Default, Clone)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct Map<D: Clone + Default> { pub struct Map<D: Clone + Default> {
pub tiles: Vec<Tile>, pub tiles: Vec<Tile>,
pub width: usize, pub width: usize,