diff -r ec4fc7eb6acd -r 07cb6dbc8444 rust/mapgen/src/template/wavefront_collapse.rs --- a/rust/mapgen/src/template/wavefront_collapse.rs Mon Jan 27 13:08:58 2025 +0100 +++ b/rust/mapgen/src/template/wavefront_collapse.rs Mon Jan 27 14:06:10 2025 +0100 @@ -6,32 +6,9 @@ use std::collections::hash_map::HashMap; #[derive(Debug, Deserialize)] -#[serde(remote = "EdgeDescription")] -pub struct EdgeDesc { - pub name: String, - pub reversed: Option, - pub symmetrical: Option, -} - -#[derive(Debug, Deserialize)] -#[serde(remote = "EdgesDescription")] -pub struct EdgesDesc { - #[serde(with = "EdgeDesc")] - pub top: EdgeDescription, - #[serde(with = "EdgeDesc")] - pub right: EdgeDescription, - #[serde(with = "EdgeDesc")] - pub bottom: EdgeDescription, - #[serde(with = "EdgeDesc")] - pub left: EdgeDescription, -} - -#[derive(Debug, Deserialize)] -#[serde(remote = "TileDescription")] pub struct TileDesc { pub name: String, - #[serde(with = "EdgesDesc")] - pub edges: EdgesDescription, + pub edges: [String; 4], pub is_negative: Option, pub can_flip: Option, pub can_mirror: Option, @@ -41,15 +18,10 @@ } #[derive(Debug, Deserialize)] -pub struct TileDescriptionHelper(#[serde(with = "TileDesc")] TileDescription); -#[derive(Debug, Deserialize)] -pub struct EdgeDescriptionHelper(#[serde(with = "EdgeDesc")] EdgeDescription); - -#[derive(Debug, Deserialize)] pub struct ComplexEdgeDesc { - pub begin: Option, - pub fill: Option, - pub end: Option, + pub begin: Option, + pub fill: Option, + pub end: Option, } #[derive(Debug, Deserialize)] pub struct NonStrictComplexEdgesDesc { @@ -69,7 +41,7 @@ pub max_hedgehogs: u8, pub wrap: bool, pub edges: Option, - pub tiles: Vec, + pub tiles: Vec, } #[derive(Debug, Deserialize)] @@ -80,25 +52,17 @@ impl From<&TemplateDesc> for TemplateDescription { fn from(desc: &TemplateDesc) -> Self { - let [top, right, bottom, left]:[Option; 4] = if let Some(edges) = &desc.edges { - [ - &edges.top, - &edges.right, - &edges.bottom, - &edges.left, - ] - .map(|e| e.as_ref().map(Into::into)) - } else { - [None, None, None, None] - }; + let [top, right, bottom, left]: [Option; 4] = + if let Some(edges) = &desc.edges { + [&edges.top, &edges.right, &edges.bottom, &edges.left] + .map(|e| e.as_ref().map(Into::into)) + } else { + [None, None, None, None] + }; Self { size: Size::new(desc.width, desc.height), - tiles: desc - .tiles - .iter() - .map(|TileDescriptionHelper(t)| t.clone()) - .collect(), + tiles: desc.tiles.iter().map(|t| t.into()).collect(), wrap: desc.wrap, can_invert: desc.can_invert, is_negative: desc.is_negative, @@ -112,12 +76,34 @@ } } +impl From<&TileDesc> for TileDescription { + fn from(desc: &TileDesc) -> Self { + let [top, right, bottom, left]: [EdgeDescription; 4] = desc.edges.clone().map(|e| e.into()); + + Self { + name: desc.name.clone(), + edges: EdgesDescription { + top, + right, + bottom, + left, + }, + is_negative: desc.is_negative, + can_flip: desc.can_flip, + can_mirror: desc.can_mirror, + can_rotate90: desc.can_rotate90, + can_rotate180: desc.can_rotate180, + can_rotate270: desc.can_rotate270, + } + } +} + impl From<&ComplexEdgeDesc> for ComplexEdgeDescription { fn from(value: &ComplexEdgeDesc) -> Self { Self { - begin: value.begin.as_ref().map(|EdgeDescriptionHelper(e)| e.clone()), - fill: value.fill.as_ref().map(|EdgeDescriptionHelper(e)| e.clone()), - end: value.end.as_ref().map(|EdgeDescriptionHelper(e)| e.clone()), + begin: value.begin.as_ref().map(|e| e.into()), + fill: value.fill.as_ref().map(|e| e.into()), + end: value.end.as_ref().map(|e| e.into()), } } }