 			return try Router.limits(authData: authData, version: self.version).asURLRequest()
 		}
 		let deserializer = {
-			(response: [String: [String: Int]]) throws -> [Limit] in
+			(response: [String: [String: Any]]) throws -> [Limit] in
 			var limits = [Limit]()
 			for (name, value) in response {
 				try limits.append(Limit(name: name, json: value))

		return request(requestBuilder: builder, jsonDeserializer: deserializer)
	}
	
	/// Asynchronously retrieves metadata information for multiple Salesforce objects.
	/// See: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_describe.htm
	/// - Parameter types: Array of object names
	/// - Returns: Promise<[ObjectDescription]>, a promise of an array of ObjectDescriptions, in the same order as the "types" parameter.
	open func describe(types: [String]) -> Promise<[ObjectDescription]> {
		let promises = types.map { describe(type: $0) }
		return when(fulfilled: promises)
	}
	
	/// Asynchronously calls an Apex method exposed as a REST endpoint.

		return request(requestBuilder: builder, jsonDeserializer: deserializer)
	}
	
	/// Asynchronously retrieves metadata about a Salesforce object and its fields.
	/// See: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_describe.htm
	/// - Parameter type: Object name
	/// - Returns: Promise<ObjectDescription>
