From a729af20cd8fb225d11a365d7f050292da0920fc Mon Sep 17 00:00:00 2001
From: David M <PieKing1215@users.noreply.github.com>
Date: Wed, 29 Dec 2021 16:43:31 -0500
Subject: [PATCH] Add image layer id parsing and make image layer name optional

Parity with tile/object layers
---
 src/layers.rs | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/layers.rs b/src/layers.rs
index 0834a83..4d65d75 100644
--- a/src/layers.rs
+++ b/src/layers.rs
@@ -127,6 +127,9 @@ pub struct ImageLayer {
     pub image: Option<Image>,
     pub properties: Properties,
     pub layer_index: u32,
+    /// The ID of the layer, as shown in the editor.
+    /// Layer ID stays the same even if layers are reordered or modified in the editor.
+    pub id: u32,
 }
 
 impl ImageLayer {
@@ -135,18 +138,20 @@ impl ImageLayer {
         attrs: Vec<OwnedAttribute>,
         layer_index: u32,
     ) -> Result<ImageLayer, TiledError> {
-        let ((o, v, ox, oy), n) = get_attrs!(
+        let ((o, v, ox, oy, n, id), ()) = get_attrs!(
             attrs,
             optionals: [
                 ("opacity", opacity, |v:String| v.parse().ok()),
                 ("visible", visible, |v:String| v.parse().ok().map(|x:i32| x == 1)),
                 ("offsetx", offset_x, |v:String| v.parse().ok()),
                 ("offsety", offset_y, |v:String| v.parse().ok()),
-            ],
-            required: [
                 ("name", name, |v| Some(v)),
+                ("id", id, |v:String| v.parse().ok()),
             ],
-            TiledError::MalformedAttributes("layer must have a name".to_string()));
+            required: [],
+            // this error should never happen since there are no required attrs
+            TiledError::MalformedAttributes("image layer parsing error".to_string())
+        );
         let mut properties = HashMap::new();
         let mut image: Option<Image> = None;
         parse_tag!(parser, "imagelayer", {
@@ -160,7 +165,7 @@ impl ImageLayer {
             },
         });
         Ok(ImageLayer {
-            name: n,
+            name: n.unwrap_or(String::new()),
             opacity: o.unwrap_or(1.0),
             visible: v.unwrap_or(true),
             offset_x: ox.unwrap_or(0.0),
@@ -168,6 +173,7 @@ impl ImageLayer {
             image,
             properties,
             layer_index,
+            id: id.unwrap_or(0),
         })
     }
 }
-- 
GitLab