namespace Spectre.Console.Json; internal sealed class JsonTokenReader { private readonly List _reader; private readonly int _length; public int Position { get; private set; } public bool Eof => Position >= _length; public JsonTokenReader(List tokens) { _reader = tokens; _length = tokens.Count; Position = 0; } public JsonToken Consume(JsonTokenType type) { var read = Read(); if (read == null) { throw new InvalidOperationException("Could not read token"); } if (read.Type != type) { throw new InvalidOperationException($"Expected '{type}' token, but found '{read.Type}'"); } return read; } public JsonToken? Peek() { if (Eof) { return null; } return _reader[Position]; } public JsonToken? Read() { if (Eof) { return null; } Position++; return _reader[Position - 1]; } }