private static async Task WriteMetadataAsync(IEdmModel edmModel, Stream stream)
        {
            var writerSettings = new ODataMessageWriterSettings();

            writerSettings.EnableMessageStreamDisposal = false;
            IODataResponseMessage message = new Infrastructure.OeInMemoryMessage(stream, null);

            using (var writer = new ODataMessageWriter((IODataResponseMessageAsync)message, writerSettings, edmModel))
                await writer.WriteMetadataDocumentAsync().ConfigureAwait(false);
        }
        /// <inheritdoc/>
        /// <remarks>The metadata written is from the model set on the <paramref name="messageWriter"/>. The <paramref name="graph" />
        /// is not used.</remarks>
        public override async Task WriteObjectAsync(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext)
        {
            if (messageWriter == null)
            {
                throw Error.ArgumentNull(nameof(messageWriter));
            }

            // NOTE: ODataMessageWriter doesn't have a way to set the IEdmModel. So, there is an underlying assumption here that
            // the model received by this method and the model passed(from configuration) while building ODataMessageWriter is the same (clr object).
            await messageWriter.WriteMetadataDocumentAsync().ConfigureAwait(false);
        }