/// <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);
        }