public Task <TryCatch <ChangeFeedPage> > MonadicChangeFeedAsync(
     FeedRangeState <ChangeFeedState> state,
     ChangeFeedPaginationOptions changeFeedPaginationOptions,
     ITrace trace,
     CancellationToken cancellationToken) => this.monadicDocumentContainer.MonadicChangeFeedAsync(
     state,
     changeFeedPaginationOptions,
     trace,
     cancellationToken);
 public ChangeFeedCrossFeedRangeAsyncEnumerable(
     IDocumentContainer documentContainer,
     ChangeFeedCrossFeedRangeState state,
     ChangeFeedPaginationOptions changeFeedPaginationOptions,
     JsonSerializationFormatOptions jsonSerializationFormatOptions = null)
 {
     this.documentContainer           = documentContainer ?? throw new ArgumentNullException(nameof(documentContainer));
     this.changeFeedPaginationOptions = changeFeedPaginationOptions ?? ChangeFeedPaginationOptions.Default;
     this.state = state;
     this.jsonSerializationFormatOptions = jsonSerializationFormatOptions;
 }
 public Task <ChangeFeedPage> ChangeFeedAsync(
     FeedRangeState <ChangeFeedState> feedRangeState,
     ChangeFeedPaginationOptions changeFeedPaginationOptions,
     ITrace trace,
     CancellationToken cancellationToken) => TryCatch <ChangeFeedPage> .UnsafeGetResultAsync(
     this.MonadicChangeFeedAsync(
         feedRangeState,
         changeFeedPaginationOptions,
         trace,
         cancellationToken),
     cancellationToken);
        public override IAsyncEnumerable <TryCatch <ChangeFeed.ChangeFeedPage> > GetChangeFeedAsyncEnumerable(
            ChangeFeedCrossFeedRangeState state,
            ChangeFeedMode changeFeedMode,
            ChangeFeedRequestOptions changeFeedRequestOptions = default)
        {
            NetworkAttachedDocumentContainer networkAttachedDocumentContainer = new NetworkAttachedDocumentContainer(
                this,
                this.queryClient,
                changeFeedRequestOptions: changeFeedRequestOptions);
            DocumentContainer documentContainer = new DocumentContainer(networkAttachedDocumentContainer);

            Dictionary <string, string> additionalHeaders;

            if ((changeFeedRequestOptions?.Properties != null) && changeFeedRequestOptions.Properties.Any())
            {
                Dictionary <string, object> additionalNonStringHeaders = new Dictionary <string, object>();
                additionalHeaders = new Dictionary <string, string>();
                foreach (KeyValuePair <string, object> keyValuePair in changeFeedRequestOptions.Properties)
                {
                    if (keyValuePair.Value is string stringValue)
                    {
                        additionalHeaders[keyValuePair.Key] = stringValue;
                    }
                    else
                    {
                        additionalNonStringHeaders[keyValuePair.Key] = keyValuePair.Value;
                    }
                }

                changeFeedRequestOptions.Properties = additionalNonStringHeaders;
            }
            else
            {
                additionalHeaders = null;
            }

            ChangeFeedPaginationOptions changeFeedPaginationOptions = new ChangeFeedPaginationOptions(
                changeFeedMode,
                changeFeedRequestOptions?.PageSizeHint,
                changeFeedRequestOptions?.JsonSerializationFormatOptions?.JsonSerializationFormat,
                additionalHeaders);

            return(new ChangeFeedCrossFeedRangeAsyncEnumerable(
                       documentContainer,
                       state,
                       changeFeedPaginationOptions,
                       changeFeedRequestOptions?.JsonSerializationFormatOptions));
        }