   // MARK: JSONPrimitiveConvertible type
   
   /// Decode a custom raw types with a mandatory key
-  public func jsonKeyPath<JSONPrimitiveConvertibleType : JSONPrimitiveConvertible>(_ key: Key) throws -> JSONPrimitiveConvertibleType {
-    
-    guard let jsonValue = self[keyPath: key] as? JSONPrimitiveConvertibleType.JSONType else {
-      throw DecodingError.mandatoryKeyNotFound(key: key)
+  public func jsonKeyPath<JSONPrimitiveConvertibleType : JSONPrimitiveConvertible>(_ keyPath: Key) throws -> JSONPrimitiveConvertibleType {
+    
+    guard let jsonValue = self[keyPath: keyPath] as? JSONPrimitiveConvertibleType.JSONType else {
+      throw DecodingError.mandatoryKeyNotFound(key: keyPath)
     }
     
     guard let transformedValue = JSONPrimitiveConvertibleType.from(jsonValue: jsonValue) else {

  }
  
  /// Decode an optional RawRepresentable
  public func jsonKeyPath<ReturnType : RawRepresentable>(_ key: Key) -> ReturnType? {
    guard let rawValue = self[key] as? ReturnType.RawValue else {
      return nil
    }
    return ReturnType(rawValue:rawValue)

  // MARK: [JSONPrimitiveConvertible] type
  
  /// Decode an array of custom raw types with a mandatory key
  public func jsonKeyPath<JSONPrimitiveConvertibleType : JSONPrimitiveConvertible>(_ keyPath: Key) throws -> [JSONPrimitiveConvertibleType] {
    
    guard let jsonValues = self[keyPath: keyPath] as? [JSONPrimitiveConvertibleType.JSONType] else {
      throw DecodingError.mandatoryKeyNotFound(key: keyPath)
    }
    
    return jsonValues.flatMap {
