/// <inheritdoc /> ICollectionPage <TValue> IConverter <IResponse <ICollection <TDTO> >, ICollectionPage <TValue> > .Convert(IResponse <ICollection <TDTO> > value, object state) { if (value == null) { return(new CollectionPage <TValue>(0)); } // MEMO: expect the page index as state argument, because we can't parse Link headers yet var pageIndex = state as int?; if (!pageIndex.HasValue) { throw new ArgumentException("Precondition: state is int", "state"); } var dataContracts = value.Content; if (dataContracts == null) { return(new CollectionPage <TValue>(0)); } var page = new CollectionPage <TValue>(dataContracts.Count) { PageSize = value.GetPageSize(), PageCount = value.GetPageTotal(), SubtotalCount = value.GetResultCount(), TotalCount = value.GetResultTotal() }; page.AddRange(dataContracts.Select(dataContract => this.dataContractConverter.Convert(dataContract, value))); // TODO: replace this code with an implementation of the Link header PageContextPatchUtility.Patch(page, pageIndex.Value); return(page); }