/// <summary>
        /// Read a metadata document.
        /// This method reads the metadata document from the input and returns
        /// an <see cref="IEdmModel"/> that represents the read metadata document.
        /// </summary>
        /// <param name="csdlReaderSettings">The given CSDL reader settings.</param>
        /// <returns>An <see cref="IEdmModel"/> representing the read metadata document.</returns>
        internal override IEdmModel ReadMetadataDocument(CsdlReaderSettingsBase csdlReaderSettings)
        {
            // Be noted: If the input setting is not JSON CSDL setting, let's use the default setting.
            CsdlJsonReaderSettings settings = csdlReaderSettings as CsdlJsonReaderSettings;
            CsdlJsonReaderSettings setting  = settings ?? CsdlJsonReaderSettings.Default;

            // We can't use stream.Read(Span<byte> buffer), this method is introduced since .NET Core 2.1. :(
            byte[] bytes = this.messageStream.ReadAllBytes();

            ReadOnlySpan <byte> jsonReadOnlySpan = new ReadOnlySpan <byte>(bytes);

            Utf8JsonReader jsonReader = new Utf8JsonReader(jsonReadOnlySpan);

            IEdmModel model;
            IEnumerable <EdmError> errors;

            if (!CsdlReader.TryParse(ref jsonReader, setting, out model, out errors))
            {
                Debug.Assert(errors != null, "errors != null");

                StringBuilder builder = new StringBuilder();
                foreach (EdmError error in errors)
                {
                    builder.AppendLine(error.ToString());
                }

                throw new ODataException(Strings.ODataMetadataInputContext_ErrorReadingMetadata(builder.ToString()));
            }

            Debug.Assert(model != null, "model != null");

            return(model);
        }
 /// <summary>
 /// Initializes a new instance of <see cref="JsonParserContext"/> class.
 /// </summary>
 /// <param name="settings">The CSDL-JSON reader settings.</param>
 /// <param name="source">The parsing source.</param>
 public JsonParserContext(CsdlJsonReaderSettings settings = null, string source = null)
 {
     Source   = source;
     Settings = settings ?? CsdlJsonReaderSettings.Default;
     _nodes   = new Stack <object>();
     Errors   = new List <EdmError>();
     _dirty   = true;
 }