//
// PacketToken.cs
//
// Copyright (c) František Boháček. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.Diagnostics.CodeAnalysis;
namespace NosSmooth.PacketSerializer.Abstractions;
///
/// The single token from a packet.
///
[SuppressMessage
(
"StyleCop.CSharp.NamingRules",
"SA1313:Parameter names should begin with lower-case letter",
Justification = "Record struct creates the underlying properties."
)]
public readonly ref struct PacketToken
{
///
/// Initializes a new instance of the struct.
///
/// The token.
/// Whether this is the last token in the current level.
/// Whether upper level separator was encountered.
/// Whether the packet end was reached.
public PacketToken
(
ReadOnlySpan token,
bool? isLast,
bool? encounteredUpperLevel,
bool packetEndReached
)
{
Token = token;
IsLast = isLast;
EncounteredUpperLevel = encounteredUpperLevel;
PacketEndReached = packetEndReached;
}
///
/// The token.
///
public ReadOnlySpan Token { get; }
///
/// Whether the token is last in the current level. Null if it cannot be determined.
///
public bool? IsLast { get; }
///
/// Whether the current separator was from an upper stack level than the parent. That could mean some kind of an error if not etc. at the end of parsing a last entry of a list and last entry of a subpacket.
///
public bool? EncounteredUpperLevel { get; }
///
/// Whether the packet's end was reached.
///
public bool PacketEndReached { get; }
}