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,