private static JsonDocument Parse( ReadOnlyMemory <byte> utf8Json, JsonReaderOptions readerOptions, byte[]?extraRentedBytes) { ReadOnlySpan <byte> utf8JsonSpan = utf8Json.Span; var database = new MetadataDb(utf8Json.Length); var stack = new StackRowStack(JsonDocumentOptions.DefaultMaxDepth * StackRow.Size); try { Parse(utf8JsonSpan, readerOptions, ref database, ref stack); } catch { database.Dispose(); throw; } finally { stack.Dispose(); } return(new JsonDocument(utf8Json, database, extraRentedBytes)); }
private static NbtDocument Parse( ReadOnlyMemory <byte> data, NbtOptions options, byte[]?extraRentedBytes, out int bytesConsumed) { ReadOnlySpan <byte> dataSpan = data.Span; var database = new MetadataDb(data.Length); var stack = new ByteStack <ContainerFrame>(NbtOptions.DefaultMaxDepth, clearOnReturn: false); var readerState = new NbtReaderState(options); var reader = new NbtReader(dataSpan, isFinalBlock: true, readerState); try { Parse(ref reader, ref database, ref stack); bytesConsumed = (int)reader.BytesConsumed; } catch { database.Dispose(); throw; } finally { readerState.Dispose(); stack.Dispose(); } return(new NbtDocument(data, options, database, extraRentedBytes, isDisposable: true)); }