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

  }

  /// Optionally decode an array custom raw types with a mandatory key
  public func jsonKeyPath<JSONPrimitiveConvertibleType : JSONPrimitiveConvertible>(_ key: Key) -> [JSONPrimitiveConvertibleType]? {
    
    guard let jsonValues = self[keyPath: key] as? [JSONPrimitiveConvertibleType.JSONType] else {
      return nil
    }
    

  }
  
  /// Optionally decode an array of RawRepresentable types with a mandatory key
  public func jsonKeyPath<ReturnType : RawRepresentable>(_ keyPath: Key) -> [ReturnType]? where ReturnType.RawValue:JSONRawType {
    
    guard let jsonValues = self[keyPath] as? [ReturnType.RawValue] else {
      return nil
    }
    
