/// <summary> /// Changes paginated method signatures to return Page type. /// </summary> /// <param name="serviceClient"></param> public virtual void NormalizePaginatedMethods(ServiceClient serviceClient) { if (serviceClient == null) { throw new ArgumentNullException("serviceClient"); } foreach (var method in serviceClient.Methods.Where(m => m.Extensions.ContainsKey(AzureExtensions.PageableExtension))) { string nextLinkName = null; var ext = method.Extensions[AzureExtensions.PageableExtension] as Newtonsoft.Json.Linq.JContainer; if (ext == null) { continue; } nextLinkName = (string)ext["nextLinkName"]; string itemName = (string)ext["itemName"] ?? "value"; foreach (var responseStatus in method.Responses.Where(r => r.Value.Body is CompositeType).Select(s => s.Key).ToArray()) { var compositType = (CompositeType)method.Responses[responseStatus].Body; var sequenceType = compositType.Properties.Select(p => p.Type).FirstOrDefault(t => t is SequenceType) as SequenceType; // if the type is a wrapper over page-able response if (sequenceType != null) { compositType.Extensions[AzureExtensions.PageableExtension] = true; var pageTemplateModel = new PageTemplateModel(compositType, serviceClient, nextLinkName, itemName); if (!pageModels.Contains(pageTemplateModel)) { pageModels.Add(pageTemplateModel); } } } } }