   return array
 }
 
+
+// MARK: Primitive Map Deserialization
+
+public func <-- (inout map: [String: String]?, value: AnyObject?) -> [String: String]? {
+  if let stringMap = convertToNilIfNull(value) as? [String: String] {
+    map = stringMap
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: String], value: AnyObject?) -> [String: String] {
+  var newValue: [String: String]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: Int]?, value: AnyObject?) -> [String: Int]? {
+  if let intMap = convertToNilIfNull(value) as? [String: Int] {
+    map = intMap
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: Int], value: AnyObject?) -> [String: Int] {
+  var newValue: [String: Int]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: Float]?, value: AnyObject?) -> [String: Float]? {
+  if let floatMap = convertToNilIfNull(value) as? [String: Float] {
+    map = floatMap
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: Float], value: AnyObject?) -> [String: Float] {
+  var newValue: [String: Float]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: Double]?, value: AnyObject?) -> [String: Double]? {
+  if let doubleMapDoubleExcitement = convertToNilIfNull(value) as? [String: Double] {
+    map = doubleMapDoubleExcitement
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: Double], value: AnyObject?) -> [String: Double] {
+  var newValue: [String: Double]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: Bool]?, value: AnyObject?) -> [String: Bool]? {
+  if let boolMap = convertToNilIfNull(value) as? [String: Bool] {
+    map = boolMap
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: Bool], value: AnyObject?) -> [String: Bool] {
+  var newValue: [String: Bool]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: NSURL]?, value: AnyObject?) -> [String: NSURL]? {
+  if let stringURLMap = convertToNilIfNull(value) as? [String: String] {
+    map = [String: NSURL]()
+    for (key, stringURL) in stringURLMap {
+      if let url = NSURL(string: stringURL) {
+        map![key] = url
+      }
+    }
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: NSURL], value: AnyObject?) -> [String: NSURL] {
+  var newValue: [String: NSURL]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: NSDate]?, valueAndFormat: (AnyObject?, AnyObject?)) -> [String: NSDate]? {
+  var newValue: [String: NSDate]?
+  if let dateStringMap = convertToNilIfNull(valueAndFormat.0) as? [String: String] {
+    if let formatString = convertToNilIfNull(valueAndFormat.1) as? String {
+      let dateFormatter = NSDateFormatter()
+      dateFormatter.dateFormat = formatString
+      newValue = [String: NSDate]()
+      for (key, dateString) in dateStringMap {
+        if let date = dateFormatter.dateFromString(dateString) {
+          newValue![key] = date
+        }
+      }
+    }
+  }
+  map = newValue
+  return map
+}
+
+public func <-- (inout map: [String: NSDate], valueAndFormat: (AnyObject?, AnyObject?)) -> [String: NSDate] {
+  var newValue: [String: NSDate]?
+  newValue <-- valueAndFormat
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+public func <-- (inout map: [String: NSDate]?, value: AnyObject?) -> [String: NSDate]? {
+  if let timestamps = convertToNilIfNull(value) as? [String: AnyObject] {
+    map = [String: NSDate]()
+    for (key, timestamp) in timestamps {
+      var date: NSDate?
+      date <-- timestamp
+      if date != nil { map![key] = date! }
+    }
+  } else {
+    map = nil
+  }
+  return map
+}
+
+public func <-- (inout map: [String: NSDate], value: AnyObject?) -> [String: NSDate] {
+  var newValue: [String: NSDate]?
+  newValue <-- value
+  if let newValue = newValue { map = newValue }
+  return map
+}
+
+
 // MARK: Custom Object Deserialization
 
 public protocol Deserializable {

  return array
}

// MARK: JSON String Deserialization

private func dataStringToObject(dataString: String) -> AnyObject? {
  var data: NSData = dataString.dataUsingEncoding(NSUTF8StringEncoding)!
  var error: NSError?
  return NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &error)
}

public func <-- <T: Deserializable>(inout instance: T?, dataString: String) -> T? {

      switch property {
      case is Int?:
        if unwrappedValue is String {
          if let intValue = Int("\(unwrappedValue)") {
            newValue = intValue as? T
          }
        }
