private Dictionary<string, MimeType> GetRequestMimeTypes(ApiDescription api)
		{
			var mediaTypes = api.SupportedRequestBodyFormatters.SelectMany(f => f.SupportedMediaTypes).ToArray();
			var mimeTypes = new Dictionary<string, MimeType>();

			var apiParam = api.ParameterDescriptions.FirstOrDefault(p => p.Source == ApiParameterSource.FromBody);
			MimeType mimeType = null;

			if (apiParam != null)
			{
				var type = apiParam.ParameterDescriptor.ParameterType;

                var schemaName = AddSchema(type);

				mimeType = new MimeType
				           {
					           Schema = schemaName
				           };
			}

			if(mimeType != null && !mediaTypes.Any())
				mimeTypes.Add("application/json", mimeType);

			foreach (var mediaType in mediaTypes)
			{
				mimeTypes.Add(mediaType.MediaType, mediaType.MediaType == "application/json" ? mimeType : new MimeType());
			}
			
			return mimeTypes;
		}
        private string GetReturnTypeFromParameter(Method method, Resource resource, MimeType mimeType, string fullUrl, string returnType)
        {
            var type = schemaParameterParser.Parse(mimeType.Schema, resource, method, fullUrl);

            if (schemaObjects.Values.Any(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
            {
                var apiObject = schemaObjects.Values
                    .First(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                return GetTypeFromApiObject(apiObject);
            }

            if (schemaResponseObjects.Values.Any(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
            {
                var apiObject = schemaResponseObjects.Values
                    .First(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                return GetTypeFromApiObject(apiObject);
            }

            return returnType;
        }
        // avois infinite recursion
        private string GetReturnTypeFromResponseWithoutCheckingResourceTypes(Method method, Resource resource, MimeType mimeType, string key, string responseCode, string fullUrl)
        {
            var returnType = GetNamedReturnType(method, resource, mimeType, fullUrl);

            if (!string.IsNullOrWhiteSpace(returnType))
                return returnType;

            if (ResponseHasKey(key))
                return GetReturnTypeFromResponseByKey(key);

            var responseKey = key + ParserHelpers.GetStatusCode(responseCode) + GeneratorServiceBase.ResponseContentSuffix;
            if (ResponseHasKey(responseKey))
                return GetReturnTypeFromResponseByKey(responseKey);

            if (linkKeysWithObjectNames.ContainsKey(key))
            {
                var linkedKey = linkKeysWithObjectNames[key];
                if (ResponseHasKey(linkedKey))
                    return GetReturnTypeFromResponseByKey(linkedKey);
            }

            if (linkKeysWithObjectNames.ContainsKey(responseKey))
            {
                var linkedKey = linkKeysWithObjectNames[responseKey];
                if (ResponseHasKey(linkedKey))
                    return GetReturnTypeFromResponseByKey(linkedKey);
            }

            return returnType;
        }
        private string GetReturnTypeFromName(MimeType mimeType, string returnType)
        {
            var type = mimeType.Schema.ToLowerInvariant();

            if (schemaObjects.Values.Any(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
            {
                var apiObject = schemaObjects.Values.First(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                returnType = GetTypeFromApiObject(apiObject);
                return returnType;
            }

            if (schemaResponseObjects.Values.Any(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
            {
                var apiObject = schemaResponseObjects.Values.First(o => o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                return GetTypeFromApiObject(apiObject);
            }

            return returnType;
        }
 private string GetNamedReturnType(Method method, Resource resource, MimeType mimeType, string fullUrl)
 {
     var returnType = string.Empty;
     if (mimeType.Schema.Contains("<<") && mimeType.Schema.Contains(">>"))
     {
         returnType = GetReturnTypeFromParameter(method, resource, mimeType, fullUrl, returnType);
     }
     else if (!mimeType.Schema.Contains("<") && !mimeType.Schema.Contains("{"))
     {
         returnType = GetReturnTypeFromName(mimeType, returnType);
     }
     return returnType;
 }
	    private string GetReturnTypeFromParameter(Method method, Resource resource, MimeType mimeType, string fullUrl, string returnType)
	    {
	        var type = schemaParameterParser.Parse(mimeType.Schema, resource, method, fullUrl);
	        if (schemaResponseObjects.Values.Any(o => o.Properties.Any() && o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
	        {
	            var apiObject =
	                schemaResponseObjects.Values.First(
	                    o => o.Properties.Any() && o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                returnType = apiObject.IsArray ? CollectionTypeHelper.GetCollectionType(apiObject.Name) : apiObject.Name;
	        }
	        return returnType;
	    }
	    private string GetReturnTypeFromName(MimeType mimeType, string returnType)
	    {
	        var type = mimeType.Schema.ToLowerInvariant();
	        if (schemaResponseObjects.Values.Any(o => o.Properties.Any() && o.Name.ToLowerInvariant() == type.ToLowerInvariant()))
	        {
	            var apiObject = schemaResponseObjects.Values.First(o => o.Properties.Any() && o.Name.ToLowerInvariant() == type.ToLowerInvariant());
                returnType = apiObject.IsArray ? CollectionTypeHelper.GetCollectionType(apiObject.Name) : apiObject.Name;
	        }
	        return returnType;
	    }
 protected Dictionary<string, MimeType> CreateMimeTypes(MimeType mimeType)
 {
     var mimeTypes = new Dictionary<string, MimeType>
     {
         {
             "application/json",
             mimeType
         }
     };
     return mimeTypes;
 }