generated/runtime/Parser/JsonToken.cs

/*---------------------------------------------------------------------------------------------
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
namespace Commvault.Powershell.Runtime.Json
{
    internal enum TokenKind
    {
        LeftBrace, // { Object start
        RightBrace, // } Object end

        LeftBracket, // [ Array start
        RightBracket, // ] Array end

        Comma, // , Comma
        Colon, // : Value indicator
        Dot, // . Access field indicator
        Terminator, // \0 Stream terminator

        Boolean = 31, // true or false
        Null = 33, // null
        Number = 34, // i.e. -1.93, -1, 0, 1, 1.1
        String = 35, // i.e. "text"

        Eof = 50
    }

    internal /* readonly */ struct JsonToken
    {
        internal static readonly JsonToken BraceOpen = new JsonToken(TokenKind.LeftBrace, "{");
        internal static readonly JsonToken BraceClose = new JsonToken(TokenKind.RightBrace, "}");

        internal static readonly JsonToken BracketOpen = new JsonToken(TokenKind.LeftBracket, "[");
        internal static readonly JsonToken BracketClose = new JsonToken(TokenKind.RightBracket, "]");

        internal static readonly JsonToken Colon = new JsonToken(TokenKind.Colon, ":");
        internal static readonly JsonToken Comma = new JsonToken(TokenKind.Comma, ",");
        internal static readonly JsonToken Terminator = new JsonToken(TokenKind.Terminator, "\0");

        internal static readonly JsonToken True = new JsonToken(TokenKind.Boolean, "true");
        internal static readonly JsonToken False = new JsonToken(TokenKind.Boolean, "false");
        internal static readonly JsonToken Null = new JsonToken(TokenKind.Null, "null");

        internal static readonly JsonToken Eof = new JsonToken(TokenKind.Eof, null);

        internal JsonToken(TokenKind kind, string value)
        {
            Kind = kind;
            Value = value;
        }

        internal readonly TokenKind Kind;

        internal readonly string Value;

        public override string ToString() => Kind + ": " + Value;

        #region Helpers

        internal bool IsLiteral => (byte)Kind > 30 && (byte)Kind < 40;

        internal bool IsTerminator => Kind == TokenKind.Terminator;

        #endregion
    }
}