From d0bfbfb84a19bb3f1fccca615d4e6f102062f706 Mon Sep 17 00:00:00 2001
From: Doug Reeves <guodman@gmail.com>
Date: Tue, 13 Jun 2017 22:35:05 -0500
Subject: [PATCH] Load in properties from the tiles

---
 src/lib.rs   | 20 +++++++++++++-------
 tests/lib.rs | 13 ++++++++++++-
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index eee8bff..efd8191 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -307,7 +307,7 @@ impl FromStr for Orientation {
 }
 
 /// A tileset, usually the tilesheet image.
-#[derive(Debug, PartialEq, Eq)]
+#[derive(Debug, PartialEq)]
 pub struct Tileset {
     /// The GID of the first tile stored
     pub first_gid: u32,
@@ -420,10 +420,11 @@ impl Tileset {
     }
 }
 
-#[derive(Debug, PartialEq, Eq)]
+#[derive(Debug, PartialEq)]
 pub struct Tile {
     pub id: u32,
-    pub images: Vec<Image>
+    pub images: Vec<Image>,
+    pub properties: Properties,
 }
 
 impl Tile {
@@ -435,12 +436,17 @@ impl Tile {
             TiledError::MalformedAttributes("tile must have an id with the correct type".to_string()));
 
         let mut images = Vec::new();
+        let mut properties = HashMap::new();
         parse_tag!(parser, "tile",
                    "image" => |attrs| {
-                        images.push(try!(Image::new(parser, attrs)));
-                        Ok(())
-        });
-        Ok(Tile {id: i, images: images})
+                       images.push(Image::new(parser, attrs)?);
+                       Ok(())
+                   },
+                   "properties" => |_| {
+                       properties = parse_properties(parser)?;
+                       Ok(())
+                   });
+        Ok(Tile {id: i, images: images, properties: properties})
     }
 }
 
diff --git a/tests/lib.rs b/tests/lib.rs
index 6ac8a99..7da63c8 100644
--- a/tests/lib.rs
+++ b/tests/lib.rs
@@ -2,7 +2,7 @@ extern crate tiled;
 
 use std::path::Path;
 use std::fs::File;
-use tiled::{Map, TiledError, parse, parse_file, parse_tileset};
+use tiled::{Map, TiledError, PropertyValue, parse, parse_file, parse_tileset};
 
 fn read_from_file(p: &Path) -> Result<Map, TiledError> {
     let file = File::open(p).unwrap();
@@ -37,3 +37,14 @@ fn test_just_tileset() {
     let t = parse_tileset(File::open(Path::new("assets/tilesheet.tsx")).unwrap(), 1).unwrap();
     assert_eq!(r.tilesets[0], t);
 }
+
+#[test]
+fn test_tile_property() {
+    let r = read_from_file(&Path::new("assets/tiled_base64.tmx")).unwrap();
+    let prop_value: String = if let Some(&PropertyValue::StringValue(ref v)) = r.tilesets[0].tiles[0].properties.get("a tile property") {
+        v.clone()
+    } else {
+        String::new()
+    };
+    assert_eq!("123", prop_value);
+}
-- 
GitLab