From f02e2637492c66c09d588f4ea28efcf041bc8cdb Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Wed, 22 Feb 2023 10:41:49 -0600 Subject: [PATCH] feat: Add optional map serialization. --- Cargo.toml | 1 + src/geometry.rs | 5 +++++ src/map.rs | 8 +++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0dc4305..e31f92a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ edition = "2021" [dependencies] rand = "0.8" +serde = { version = "1", optional = true, features = ["derive"]} [package.metadata.release] publish = false diff --git a/src/geometry.rs b/src/geometry.rs index 564974d..846e21f 100644 --- a/src/geometry.rs +++ b/src/geometry.rs @@ -1,8 +1,12 @@ //! Support function for 2D geometry //! +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + /// Position on the map #[derive(Default, PartialEq, Copy, Clone, Debug, Eq, Hash)] +#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))] pub struct Point { pub x: usize, pub y: usize, @@ -29,6 +33,7 @@ impl Point { /// Rectangle region on the map #[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)] +#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))] pub struct Rect { pub x1: usize, pub x2: usize, diff --git a/src/map.rs b/src/map.rs index c84c762..5e8fa87 100644 --- a/src/map.rs +++ b/src/map.rs @@ -7,10 +7,15 @@ //! specific game. //! -use super::geometry::{usize_abs, Point, Rect}; use std::fmt; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + +use crate::geometry::{usize_abs, Point, Rect}; + #[derive(PartialEq, Copy, Clone, Debug, Eq, Hash)] +#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))] pub struct Tile { is_blocked: bool, index: usize, @@ -30,6 +35,7 @@ pub struct NoData; /// Map data #[derive(Default, Clone)] +#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))] pub struct Map { pub tiles: Vec, pub width: usize,