mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-06-20 05:48:14 +08:00

* Less cluttered solution layout. * Move examples to a repository of its own. * Move Roslyn analyzer to a repository of its own. * Enable central package management. * Clean up csproj files. * Add README file to NuGet packages.
56 lines
1.1 KiB
C#
56 lines
1.1 KiB
C#
namespace Spectre.Console.Json;
|
|
|
|
internal sealed class JsonTokenReader
|
|
{
|
|
private readonly List<JsonToken> _reader;
|
|
private readonly int _length;
|
|
|
|
public int Position { get; private set; }
|
|
public bool Eof => Position >= _length;
|
|
|
|
public JsonTokenReader(List<JsonToken> 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];
|
|
}
|
|
}
|