Skip to main content

nwnrs_nwscript/
token.rs

1use serde::{Deserialize, Serialize};
2
3use crate::source::Span;
4
5/// Maximum token payload length used by the upstream compiler.
6pub const MAX_TOKEN_LENGTH: usize = 65_536;
7
8/// One `NWScript` keyword or builtin token recognized during lexing.
9#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Keyword {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                Keyword::If => "If",
                Keyword::Do => "Do",
                Keyword::Else => "Else",
                Keyword::Int => "Int",
                Keyword::Float => "Float",
                Keyword::String => "String",
                Keyword::Object => "Object",
                Keyword::Return => "Return",
                Keyword::While => "While",
                Keyword::For => "For",
                Keyword::Void => "Void",
                Keyword::Case => "Case",
                Keyword::Break => "Break",
                Keyword::Struct => "Struct",
                Keyword::Action => "Action",
                Keyword::Switch => "Switch",
                Keyword::Default => "Default",
                Keyword::Include => "Include",
                Keyword::Continue => "Continue",
                Keyword::Vector => "Vector",
                Keyword::Const => "Const",
                Keyword::Define => "Define",
                Keyword::ObjectSelf => "ObjectSelf",
                Keyword::ObjectInvalid => "ObjectInvalid",
                Keyword::EngineNumStructuresDefinition =>
                    "EngineNumStructuresDefinition",
                Keyword::EngineStructureDefinition =>
                    "EngineStructureDefinition",
                Keyword::JsonNull => "JsonNull",
                Keyword::JsonFalse => "JsonFalse",
                Keyword::JsonTrue => "JsonTrue",
                Keyword::JsonObject => "JsonObject",
                Keyword::JsonArray => "JsonArray",
                Keyword::JsonString => "JsonString",
                Keyword::LocationInvalid => "LocationInvalid",
                Keyword::FunctionMacro => "FunctionMacro",
                Keyword::FileMacro => "FileMacro",
                Keyword::LineMacro => "LineMacro",
                Keyword::DateMacro => "DateMacro",
                Keyword::TimeMacro => "TimeMacro",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Keyword {
    #[inline]
    fn clone(&self) -> Keyword { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Keyword { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Keyword {
    #[inline]
    fn eq(&self, other: &Keyword) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Keyword {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Keyword {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Keyword {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Keyword::If =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 0u32, "If"),
                    Keyword::Do =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 1u32, "Do"),
                    Keyword::Else =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 2u32, "Else"),
                    Keyword::Int =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 3u32, "Int"),
                    Keyword::Float =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 4u32, "Float"),
                    Keyword::String =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 5u32, "String"),
                    Keyword::Object =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 6u32, "Object"),
                    Keyword::Return =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 7u32, "Return"),
                    Keyword::While =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 8u32, "While"),
                    Keyword::For =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 9u32, "For"),
                    Keyword::Void =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 10u32, "Void"),
                    Keyword::Case =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 11u32, "Case"),
                    Keyword::Break =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 12u32, "Break"),
                    Keyword::Struct =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 13u32, "Struct"),
                    Keyword::Action =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 14u32, "Action"),
                    Keyword::Switch =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 15u32, "Switch"),
                    Keyword::Default =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 16u32, "Default"),
                    Keyword::Include =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 17u32, "Include"),
                    Keyword::Continue =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 18u32, "Continue"),
                    Keyword::Vector =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 19u32, "Vector"),
                    Keyword::Const =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 20u32, "Const"),
                    Keyword::Define =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 21u32, "Define"),
                    Keyword::ObjectSelf =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 22u32, "ObjectSelf"),
                    Keyword::ObjectInvalid =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 23u32, "ObjectInvalid"),
                    Keyword::EngineNumStructuresDefinition =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 24u32, "EngineNumStructuresDefinition"),
                    Keyword::EngineStructureDefinition =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 25u32, "EngineStructureDefinition"),
                    Keyword::JsonNull =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 26u32, "JsonNull"),
                    Keyword::JsonFalse =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 27u32, "JsonFalse"),
                    Keyword::JsonTrue =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 28u32, "JsonTrue"),
                    Keyword::JsonObject =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 29u32, "JsonObject"),
                    Keyword::JsonArray =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 30u32, "JsonArray"),
                    Keyword::JsonString =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 31u32, "JsonString"),
                    Keyword::LocationInvalid =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 32u32, "LocationInvalid"),
                    Keyword::FunctionMacro =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 33u32, "FunctionMacro"),
                    Keyword::FileMacro =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 34u32, "FileMacro"),
                    Keyword::LineMacro =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 35u32, "LineMacro"),
                    Keyword::DateMacro =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 36u32, "DateMacro"),
                    Keyword::TimeMacro =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Keyword", 37u32, "TimeMacro"),
                }
            }
        }
    };Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for Keyword {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                    __field6,
                    __field7,
                    __field8,
                    __field9,
                    __field10,
                    __field11,
                    __field12,
                    __field13,
                    __field14,
                    __field15,
                    __field16,
                    __field17,
                    __field18,
                    __field19,
                    __field20,
                    __field21,
                    __field22,
                    __field23,
                    __field24,
                    __field25,
                    __field26,
                    __field27,
                    __field28,
                    __field29,
                    __field30,
                    __field31,
                    __field32,
                    __field33,
                    __field34,
                    __field35,
                    __field36,
                    __field37,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            6u64 => _serde::__private228::Ok(__Field::__field6),
                            7u64 => _serde::__private228::Ok(__Field::__field7),
                            8u64 => _serde::__private228::Ok(__Field::__field8),
                            9u64 => _serde::__private228::Ok(__Field::__field9),
                            10u64 => _serde::__private228::Ok(__Field::__field10),
                            11u64 => _serde::__private228::Ok(__Field::__field11),
                            12u64 => _serde::__private228::Ok(__Field::__field12),
                            13u64 => _serde::__private228::Ok(__Field::__field13),
                            14u64 => _serde::__private228::Ok(__Field::__field14),
                            15u64 => _serde::__private228::Ok(__Field::__field15),
                            16u64 => _serde::__private228::Ok(__Field::__field16),
                            17u64 => _serde::__private228::Ok(__Field::__field17),
                            18u64 => _serde::__private228::Ok(__Field::__field18),
                            19u64 => _serde::__private228::Ok(__Field::__field19),
                            20u64 => _serde::__private228::Ok(__Field::__field20),
                            21u64 => _serde::__private228::Ok(__Field::__field21),
                            22u64 => _serde::__private228::Ok(__Field::__field22),
                            23u64 => _serde::__private228::Ok(__Field::__field23),
                            24u64 => _serde::__private228::Ok(__Field::__field24),
                            25u64 => _serde::__private228::Ok(__Field::__field25),
                            26u64 => _serde::__private228::Ok(__Field::__field26),
                            27u64 => _serde::__private228::Ok(__Field::__field27),
                            28u64 => _serde::__private228::Ok(__Field::__field28),
                            29u64 => _serde::__private228::Ok(__Field::__field29),
                            30u64 => _serde::__private228::Ok(__Field::__field30),
                            31u64 => _serde::__private228::Ok(__Field::__field31),
                            32u64 => _serde::__private228::Ok(__Field::__field32),
                            33u64 => _serde::__private228::Ok(__Field::__field33),
                            34u64 => _serde::__private228::Ok(__Field::__field34),
                            35u64 => _serde::__private228::Ok(__Field::__field35),
                            36u64 => _serde::__private228::Ok(__Field::__field36),
                            37u64 => _serde::__private228::Ok(__Field::__field37),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 38")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "If" => _serde::__private228::Ok(__Field::__field0),
                            "Do" => _serde::__private228::Ok(__Field::__field1),
                            "Else" => _serde::__private228::Ok(__Field::__field2),
                            "Int" => _serde::__private228::Ok(__Field::__field3),
                            "Float" => _serde::__private228::Ok(__Field::__field4),
                            "String" => _serde::__private228::Ok(__Field::__field5),
                            "Object" => _serde::__private228::Ok(__Field::__field6),
                            "Return" => _serde::__private228::Ok(__Field::__field7),
                            "While" => _serde::__private228::Ok(__Field::__field8),
                            "For" => _serde::__private228::Ok(__Field::__field9),
                            "Void" => _serde::__private228::Ok(__Field::__field10),
                            "Case" => _serde::__private228::Ok(__Field::__field11),
                            "Break" => _serde::__private228::Ok(__Field::__field12),
                            "Struct" => _serde::__private228::Ok(__Field::__field13),
                            "Action" => _serde::__private228::Ok(__Field::__field14),
                            "Switch" => _serde::__private228::Ok(__Field::__field15),
                            "Default" => _serde::__private228::Ok(__Field::__field16),
                            "Include" => _serde::__private228::Ok(__Field::__field17),
                            "Continue" => _serde::__private228::Ok(__Field::__field18),
                            "Vector" => _serde::__private228::Ok(__Field::__field19),
                            "Const" => _serde::__private228::Ok(__Field::__field20),
                            "Define" => _serde::__private228::Ok(__Field::__field21),
                            "ObjectSelf" =>
                                _serde::__private228::Ok(__Field::__field22),
                            "ObjectInvalid" =>
                                _serde::__private228::Ok(__Field::__field23),
                            "EngineNumStructuresDefinition" =>
                                _serde::__private228::Ok(__Field::__field24),
                            "EngineStructureDefinition" =>
                                _serde::__private228::Ok(__Field::__field25),
                            "JsonNull" => _serde::__private228::Ok(__Field::__field26),
                            "JsonFalse" => _serde::__private228::Ok(__Field::__field27),
                            "JsonTrue" => _serde::__private228::Ok(__Field::__field28),
                            "JsonObject" =>
                                _serde::__private228::Ok(__Field::__field29),
                            "JsonArray" => _serde::__private228::Ok(__Field::__field30),
                            "JsonString" =>
                                _serde::__private228::Ok(__Field::__field31),
                            "LocationInvalid" =>
                                _serde::__private228::Ok(__Field::__field32),
                            "FunctionMacro" =>
                                _serde::__private228::Ok(__Field::__field33),
                            "FileMacro" => _serde::__private228::Ok(__Field::__field34),
                            "LineMacro" => _serde::__private228::Ok(__Field::__field35),
                            "DateMacro" => _serde::__private228::Ok(__Field::__field36),
                            "TimeMacro" => _serde::__private228::Ok(__Field::__field37),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"If" => _serde::__private228::Ok(__Field::__field0),
                            b"Do" => _serde::__private228::Ok(__Field::__field1),
                            b"Else" => _serde::__private228::Ok(__Field::__field2),
                            b"Int" => _serde::__private228::Ok(__Field::__field3),
                            b"Float" => _serde::__private228::Ok(__Field::__field4),
                            b"String" => _serde::__private228::Ok(__Field::__field5),
                            b"Object" => _serde::__private228::Ok(__Field::__field6),
                            b"Return" => _serde::__private228::Ok(__Field::__field7),
                            b"While" => _serde::__private228::Ok(__Field::__field8),
                            b"For" => _serde::__private228::Ok(__Field::__field9),
                            b"Void" => _serde::__private228::Ok(__Field::__field10),
                            b"Case" => _serde::__private228::Ok(__Field::__field11),
                            b"Break" => _serde::__private228::Ok(__Field::__field12),
                            b"Struct" => _serde::__private228::Ok(__Field::__field13),
                            b"Action" => _serde::__private228::Ok(__Field::__field14),
                            b"Switch" => _serde::__private228::Ok(__Field::__field15),
                            b"Default" => _serde::__private228::Ok(__Field::__field16),
                            b"Include" => _serde::__private228::Ok(__Field::__field17),
                            b"Continue" => _serde::__private228::Ok(__Field::__field18),
                            b"Vector" => _serde::__private228::Ok(__Field::__field19),
                            b"Const" => _serde::__private228::Ok(__Field::__field20),
                            b"Define" => _serde::__private228::Ok(__Field::__field21),
                            b"ObjectSelf" =>
                                _serde::__private228::Ok(__Field::__field22),
                            b"ObjectInvalid" =>
                                _serde::__private228::Ok(__Field::__field23),
                            b"EngineNumStructuresDefinition" =>
                                _serde::__private228::Ok(__Field::__field24),
                            b"EngineStructureDefinition" =>
                                _serde::__private228::Ok(__Field::__field25),
                            b"JsonNull" => _serde::__private228::Ok(__Field::__field26),
                            b"JsonFalse" =>
                                _serde::__private228::Ok(__Field::__field27),
                            b"JsonTrue" => _serde::__private228::Ok(__Field::__field28),
                            b"JsonObject" =>
                                _serde::__private228::Ok(__Field::__field29),
                            b"JsonArray" =>
                                _serde::__private228::Ok(__Field::__field30),
                            b"JsonString" =>
                                _serde::__private228::Ok(__Field::__field31),
                            b"LocationInvalid" =>
                                _serde::__private228::Ok(__Field::__field32),
                            b"FunctionMacro" =>
                                _serde::__private228::Ok(__Field::__field33),
                            b"FileMacro" =>
                                _serde::__private228::Ok(__Field::__field34),
                            b"LineMacro" =>
                                _serde::__private228::Ok(__Field::__field35),
                            b"DateMacro" =>
                                _serde::__private228::Ok(__Field::__field36),
                            b"TimeMacro" =>
                                _serde::__private228::Ok(__Field::__field37),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<Keyword>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Keyword;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum Keyword")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::If)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Do)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Else)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Int)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Float)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::String)
                            }
                            (__Field::__field6, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Object)
                            }
                            (__Field::__field7, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Return)
                            }
                            (__Field::__field8, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::While)
                            }
                            (__Field::__field9, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::For)
                            }
                            (__Field::__field10, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Void)
                            }
                            (__Field::__field11, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Case)
                            }
                            (__Field::__field12, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Break)
                            }
                            (__Field::__field13, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Struct)
                            }
                            (__Field::__field14, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Action)
                            }
                            (__Field::__field15, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Switch)
                            }
                            (__Field::__field16, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Default)
                            }
                            (__Field::__field17, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Include)
                            }
                            (__Field::__field18, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Continue)
                            }
                            (__Field::__field19, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Vector)
                            }
                            (__Field::__field20, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Const)
                            }
                            (__Field::__field21, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::Define)
                            }
                            (__Field::__field22, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::ObjectSelf)
                            }
                            (__Field::__field23, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::ObjectInvalid)
                            }
                            (__Field::__field24, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::EngineNumStructuresDefinition)
                            }
                            (__Field::__field25, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::EngineStructureDefinition)
                            }
                            (__Field::__field26, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonNull)
                            }
                            (__Field::__field27, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonFalse)
                            }
                            (__Field::__field28, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonTrue)
                            }
                            (__Field::__field29, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonObject)
                            }
                            (__Field::__field30, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonArray)
                            }
                            (__Field::__field31, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::JsonString)
                            }
                            (__Field::__field32, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::LocationInvalid)
                            }
                            (__Field::__field33, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::FunctionMacro)
                            }
                            (__Field::__field34, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::FileMacro)
                            }
                            (__Field::__field35, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::LineMacro)
                            }
                            (__Field::__field36, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::DateMacro)
                            }
                            (__Field::__field37, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Keyword::TimeMacro)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["If", "Do", "Else", "Int", "Float", "String", "Object",
                                "Return", "While", "For", "Void", "Case", "Break", "Struct",
                                "Action", "Switch", "Default", "Include", "Continue",
                                "Vector", "Const", "Define", "ObjectSelf", "ObjectInvalid",
                                "EngineNumStructuresDefinition",
                                "EngineStructureDefinition", "JsonNull", "JsonFalse",
                                "JsonTrue", "JsonObject", "JsonArray", "JsonString",
                                "LocationInvalid", "FunctionMacro", "FileMacro",
                                "LineMacro", "DateMacro", "TimeMacro"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "Keyword", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Keyword>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
10pub enum Keyword {
11    /// `if`
12    If,
13    /// `do`
14    Do,
15    /// `else`
16    Else,
17    /// `int`
18    Int,
19    /// `float`
20    Float,
21    /// `string`
22    String,
23    /// `object`
24    Object,
25    /// `return`
26    Return,
27    /// `while`
28    While,
29    /// `for`
30    For,
31    /// `void`
32    Void,
33    /// `case`
34    Case,
35    /// `break`
36    Break,
37    /// `struct`
38    Struct,
39    /// `action`
40    Action,
41    /// `switch`
42    Switch,
43    /// `default`
44    Default,
45    /// `#include`
46    Include,
47    /// `continue`
48    Continue,
49    /// `vector`
50    Vector,
51    /// `const`
52    Const,
53    /// `#define`
54    Define,
55    /// `OBJECT_SELF`
56    ObjectSelf,
57    /// `OBJECT_INVALID`
58    ObjectInvalid,
59    /// `ENGINE_NUM_STRUCTURES`
60    EngineNumStructuresDefinition,
61    /// `ENGINE_STRUCTURE_0` through `ENGINE_STRUCTURE_9`
62    EngineStructureDefinition,
63    /// `JSON_NULL`
64    JsonNull,
65    /// `JSON_FALSE`
66    JsonFalse,
67    /// `JSON_TRUE`
68    JsonTrue,
69    /// `JSON_OBJECT`
70    JsonObject,
71    /// `JSON_ARRAY`
72    JsonArray,
73    /// `JSON_STRING`
74    JsonString,
75    /// `LOCATION_INVALID`
76    LocationInvalid,
77    /// `__FUNCTION__`
78    FunctionMacro,
79    /// `__FILE__`
80    FileMacro,
81    /// `__LINE__`
82    LineMacro,
83    /// `__DATE__`
84    DateMacro,
85    /// `__TIME__`
86    TimeMacro,
87}
88
89impl Keyword {
90    /// Returns the canonical source text for this keyword.
91    #[must_use]
92    pub const fn as_str(self) -> &'static str {
93        match self {
94            Self::If => "if",
95            Self::Do => "do",
96            Self::Else => "else",
97            Self::Int => "int",
98            Self::Float => "float",
99            Self::String => "string",
100            Self::Object => "object",
101            Self::Return => "return",
102            Self::While => "while",
103            Self::For => "for",
104            Self::Void => "void",
105            Self::Case => "case",
106            Self::Break => "break",
107            Self::Struct => "struct",
108            Self::Action => "action",
109            Self::Switch => "switch",
110            Self::Default => "default",
111            Self::Include => "#include",
112            Self::Continue => "continue",
113            Self::Vector => "vector",
114            Self::Const => "const",
115            Self::Define => "#define",
116            Self::ObjectSelf => "OBJECT_SELF",
117            Self::ObjectInvalid => "OBJECT_INVALID",
118            Self::EngineNumStructuresDefinition => "ENGINE_NUM_STRUCTURES",
119            Self::EngineStructureDefinition => "ENGINE_STRUCTURE_N",
120            Self::JsonNull => "JSON_NULL",
121            Self::JsonFalse => "JSON_FALSE",
122            Self::JsonTrue => "JSON_TRUE",
123            Self::JsonObject => "JSON_OBJECT",
124            Self::JsonArray => "JSON_ARRAY",
125            Self::JsonString => "JSON_STRING",
126            Self::LocationInvalid => "LOCATION_INVALID",
127            Self::FunctionMacro => "__FUNCTION__",
128            Self::FileMacro => "__FILE__",
129            Self::LineMacro => "__LINE__",
130            Self::DateMacro => "__DATE__",
131            Self::TimeMacro => "__TIME__",
132        }
133    }
134
135    /// Returns the upstream token code from `scriptinternal.h`.
136    #[must_use]
137    pub const fn upstream_token_code(self) -> u16 {
138        match self {
139            Self::If => 17,
140            Self::Do => 52,
141            Self::Else => 18,
142            Self::Int => 29,
143            Self::Float => 30,
144            Self::String => 31,
145            Self::Object => 32,
146            Self::Return => 49,
147            Self::While => 50,
148            Self::For => 51,
149            Self::Void => 53,
150            Self::Case => 103,
151            Self::Break => 104,
152            Self::Struct => 54,
153            Self::Action => 47,
154            Self::Switch => 105,
155            Self::Default => 106,
156            Self::Include => 57,
157            Self::Continue => 107,
158            Self::Vector => 59,
159            Self::Const => 108,
160            Self::Define => 60,
161            Self::ObjectSelf => 83,
162            Self::ObjectInvalid => 84,
163            Self::EngineNumStructuresDefinition => 61,
164            Self::EngineStructureDefinition => 62,
165            Self::JsonNull => 109,
166            Self::JsonFalse => 110,
167            Self::JsonTrue => 111,
168            Self::JsonObject => 112,
169            Self::JsonArray => 113,
170            Self::JsonString => 114,
171            Self::LocationInvalid => 115,
172            Self::FunctionMacro => 117,
173            Self::FileMacro => 118,
174            Self::LineMacro => 119,
175            Self::DateMacro => 120,
176            Self::TimeMacro => 121,
177        }
178    }
179
180    /// Resolves a keyword from its exact source spelling.
181    #[must_use]
182    pub fn from_lexeme(input: &str) -> Option<Self> {
183        match input {
184            "if" => Some(Self::If),
185            "do" => Some(Self::Do),
186            "else" => Some(Self::Else),
187            "int" => Some(Self::Int),
188            "float" => Some(Self::Float),
189            "string" => Some(Self::String),
190            "object" => Some(Self::Object),
191            "return" => Some(Self::Return),
192            "while" => Some(Self::While),
193            "for" => Some(Self::For),
194            "void" => Some(Self::Void),
195            "case" => Some(Self::Case),
196            "break" => Some(Self::Break),
197            "struct" => Some(Self::Struct),
198            "action" => Some(Self::Action),
199            "switch" => Some(Self::Switch),
200            "default" => Some(Self::Default),
201            "#include" => Some(Self::Include),
202            "continue" => Some(Self::Continue),
203            "vector" => Some(Self::Vector),
204            "const" => Some(Self::Const),
205            "#define" => Some(Self::Define),
206            "OBJECT_SELF" => Some(Self::ObjectSelf),
207            "OBJECT_INVALID" => Some(Self::ObjectInvalid),
208            "ENGINE_NUM_STRUCTURES" => Some(Self::EngineNumStructuresDefinition),
209            "ENGINE_STRUCTURE_0" | "ENGINE_STRUCTURE_1" | "ENGINE_STRUCTURE_2"
210            | "ENGINE_STRUCTURE_3" | "ENGINE_STRUCTURE_4" | "ENGINE_STRUCTURE_5"
211            | "ENGINE_STRUCTURE_6" | "ENGINE_STRUCTURE_7" | "ENGINE_STRUCTURE_8"
212            | "ENGINE_STRUCTURE_9" => Some(Self::EngineStructureDefinition),
213            "JSON_NULL" => Some(Self::JsonNull),
214            "JSON_FALSE" => Some(Self::JsonFalse),
215            "JSON_TRUE" => Some(Self::JsonTrue),
216            "JSON_OBJECT" => Some(Self::JsonObject),
217            "JSON_ARRAY" => Some(Self::JsonArray),
218            "JSON_STRING" => Some(Self::JsonString),
219            "LOCATION_INVALID" => Some(Self::LocationInvalid),
220            "__FUNCTION__" => Some(Self::FunctionMacro),
221            "__FILE__" => Some(Self::FileMacro),
222            "__LINE__" => Some(Self::LineMacro),
223            "__DATE__" => Some(Self::DateMacro),
224            "__TIME__" => Some(Self::TimeMacro),
225            _ => None,
226        }
227    }
228}
229
230/// One lexical token in `NWScript` source.
231#[derive(#[automatically_derived]
impl ::core::fmt::Debug for TokenKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TokenKind::Eof => ::core::fmt::Formatter::write_str(f, "Eof"),
            TokenKind::Identifier =>
                ::core::fmt::Formatter::write_str(f, "Identifier"),
            TokenKind::Integer =>
                ::core::fmt::Formatter::write_str(f, "Integer"),
            TokenKind::HexInteger =>
                ::core::fmt::Formatter::write_str(f, "HexInteger"),
            TokenKind::BinaryInteger =>
                ::core::fmt::Formatter::write_str(f, "BinaryInteger"),
            TokenKind::OctalInteger =>
                ::core::fmt::Formatter::write_str(f, "OctalInteger"),
            TokenKind::Float => ::core::fmt::Formatter::write_str(f, "Float"),
            TokenKind::String =>
                ::core::fmt::Formatter::write_str(f, "String"),
            TokenKind::HashedString =>
                ::core::fmt::Formatter::write_str(f, "HashedString"),
            TokenKind::Keyword(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Keyword", &__self_0),
            TokenKind::Divide =>
                ::core::fmt::Formatter::write_str(f, "Divide"),
            TokenKind::LogicalAnd =>
                ::core::fmt::Formatter::write_str(f, "LogicalAnd"),
            TokenKind::LogicalOr =>
                ::core::fmt::Formatter::write_str(f, "LogicalOr"),
            TokenKind::Minus => ::core::fmt::Formatter::write_str(f, "Minus"),
            TokenKind::LeftBrace =>
                ::core::fmt::Formatter::write_str(f, "LeftBrace"),
            TokenKind::RightBrace =>
                ::core::fmt::Formatter::write_str(f, "RightBrace"),
            TokenKind::LeftParen =>
                ::core::fmt::Formatter::write_str(f, "LeftParen"),
            TokenKind::RightParen =>
                ::core::fmt::Formatter::write_str(f, "RightParen"),
            TokenKind::Semicolon =>
                ::core::fmt::Formatter::write_str(f, "Semicolon"),
            TokenKind::Comma => ::core::fmt::Formatter::write_str(f, "Comma"),
            TokenKind::GreaterEqual =>
                ::core::fmt::Formatter::write_str(f, "GreaterEqual"),
            TokenKind::LessEqual =>
                ::core::fmt::Formatter::write_str(f, "LessEqual"),
            TokenKind::GreaterThan =>
                ::core::fmt::Formatter::write_str(f, "GreaterThan"),
            TokenKind::LessThan =>
                ::core::fmt::Formatter::write_str(f, "LessThan"),
            TokenKind::NotEqual =>
                ::core::fmt::Formatter::write_str(f, "NotEqual"),
            TokenKind::EqualEqual =>
                ::core::fmt::Formatter::write_str(f, "EqualEqual"),
            TokenKind::Plus => ::core::fmt::Formatter::write_str(f, "Plus"),
            TokenKind::Modulus =>
                ::core::fmt::Formatter::write_str(f, "Modulus"),
            TokenKind::Assign =>
                ::core::fmt::Formatter::write_str(f, "Assign"),
            TokenKind::InclusiveOr =>
                ::core::fmt::Formatter::write_str(f, "InclusiveOr"),
            TokenKind::ExclusiveOr =>
                ::core::fmt::Formatter::write_str(f, "ExclusiveOr"),
            TokenKind::BooleanAnd =>
                ::core::fmt::Formatter::write_str(f, "BooleanAnd"),
            TokenKind::ShiftLeft =>
                ::core::fmt::Formatter::write_str(f, "ShiftLeft"),
            TokenKind::ShiftRight =>
                ::core::fmt::Formatter::write_str(f, "ShiftRight"),
            TokenKind::Multiply =>
                ::core::fmt::Formatter::write_str(f, "Multiply"),
            TokenKind::UnsignedShiftRight =>
                ::core::fmt::Formatter::write_str(f, "UnsignedShiftRight"),
            TokenKind::Tilde => ::core::fmt::Formatter::write_str(f, "Tilde"),
            TokenKind::StructurePartSpecify =>
                ::core::fmt::Formatter::write_str(f, "StructurePartSpecify"),
            TokenKind::BooleanNot =>
                ::core::fmt::Formatter::write_str(f, "BooleanNot"),
            TokenKind::LeftSquareBracket =>
                ::core::fmt::Formatter::write_str(f, "LeftSquareBracket"),
            TokenKind::RightSquareBracket =>
                ::core::fmt::Formatter::write_str(f, "RightSquareBracket"),
            TokenKind::Increment =>
                ::core::fmt::Formatter::write_str(f, "Increment"),
            TokenKind::Decrement =>
                ::core::fmt::Formatter::write_str(f, "Decrement"),
            TokenKind::AssignMinus =>
                ::core::fmt::Formatter::write_str(f, "AssignMinus"),
            TokenKind::AssignPlus =>
                ::core::fmt::Formatter::write_str(f, "AssignPlus"),
            TokenKind::AssignMultiply =>
                ::core::fmt::Formatter::write_str(f, "AssignMultiply"),
            TokenKind::AssignDivide =>
                ::core::fmt::Formatter::write_str(f, "AssignDivide"),
            TokenKind::AssignModulus =>
                ::core::fmt::Formatter::write_str(f, "AssignModulus"),
            TokenKind::AssignAnd =>
                ::core::fmt::Formatter::write_str(f, "AssignAnd"),
            TokenKind::AssignXor =>
                ::core::fmt::Formatter::write_str(f, "AssignXor"),
            TokenKind::AssignOr =>
                ::core::fmt::Formatter::write_str(f, "AssignOr"),
            TokenKind::AssignShiftLeft =>
                ::core::fmt::Formatter::write_str(f, "AssignShiftLeft"),
            TokenKind::AssignShiftRight =>
                ::core::fmt::Formatter::write_str(f, "AssignShiftRight"),
            TokenKind::AssignUnsignedShiftRight =>
                ::core::fmt::Formatter::write_str(f,
                    "AssignUnsignedShiftRight"),
            TokenKind::QuestionMark =>
                ::core::fmt::Formatter::write_str(f, "QuestionMark"),
            TokenKind::Colon => ::core::fmt::Formatter::write_str(f, "Colon"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for TokenKind {
    #[inline]
    fn clone(&self) -> TokenKind {
        match self {
            TokenKind::Eof => TokenKind::Eof,
            TokenKind::Identifier => TokenKind::Identifier,
            TokenKind::Integer => TokenKind::Integer,
            TokenKind::HexInteger => TokenKind::HexInteger,
            TokenKind::BinaryInteger => TokenKind::BinaryInteger,
            TokenKind::OctalInteger => TokenKind::OctalInteger,
            TokenKind::Float => TokenKind::Float,
            TokenKind::String => TokenKind::String,
            TokenKind::HashedString => TokenKind::HashedString,
            TokenKind::Keyword(__self_0) =>
                TokenKind::Keyword(::core::clone::Clone::clone(__self_0)),
            TokenKind::Divide => TokenKind::Divide,
            TokenKind::LogicalAnd => TokenKind::LogicalAnd,
            TokenKind::LogicalOr => TokenKind::LogicalOr,
            TokenKind::Minus => TokenKind::Minus,
            TokenKind::LeftBrace => TokenKind::LeftBrace,
            TokenKind::RightBrace => TokenKind::RightBrace,
            TokenKind::LeftParen => TokenKind::LeftParen,
            TokenKind::RightParen => TokenKind::RightParen,
            TokenKind::Semicolon => TokenKind::Semicolon,
            TokenKind::Comma => TokenKind::Comma,
            TokenKind::GreaterEqual => TokenKind::GreaterEqual,
            TokenKind::LessEqual => TokenKind::LessEqual,
            TokenKind::GreaterThan => TokenKind::GreaterThan,
            TokenKind::LessThan => TokenKind::LessThan,
            TokenKind::NotEqual => TokenKind::NotEqual,
            TokenKind::EqualEqual => TokenKind::EqualEqual,
            TokenKind::Plus => TokenKind::Plus,
            TokenKind::Modulus => TokenKind::Modulus,
            TokenKind::Assign => TokenKind::Assign,
            TokenKind::InclusiveOr => TokenKind::InclusiveOr,
            TokenKind::ExclusiveOr => TokenKind::ExclusiveOr,
            TokenKind::BooleanAnd => TokenKind::BooleanAnd,
            TokenKind::ShiftLeft => TokenKind::ShiftLeft,
            TokenKind::ShiftRight => TokenKind::ShiftRight,
            TokenKind::Multiply => TokenKind::Multiply,
            TokenKind::UnsignedShiftRight => TokenKind::UnsignedShiftRight,
            TokenKind::Tilde => TokenKind::Tilde,
            TokenKind::StructurePartSpecify =>
                TokenKind::StructurePartSpecify,
            TokenKind::BooleanNot => TokenKind::BooleanNot,
            TokenKind::LeftSquareBracket => TokenKind::LeftSquareBracket,
            TokenKind::RightSquareBracket => TokenKind::RightSquareBracket,
            TokenKind::Increment => TokenKind::Increment,
            TokenKind::Decrement => TokenKind::Decrement,
            TokenKind::AssignMinus => TokenKind::AssignMinus,
            TokenKind::AssignPlus => TokenKind::AssignPlus,
            TokenKind::AssignMultiply => TokenKind::AssignMultiply,
            TokenKind::AssignDivide => TokenKind::AssignDivide,
            TokenKind::AssignModulus => TokenKind::AssignModulus,
            TokenKind::AssignAnd => TokenKind::AssignAnd,
            TokenKind::AssignXor => TokenKind::AssignXor,
            TokenKind::AssignOr => TokenKind::AssignOr,
            TokenKind::AssignShiftLeft => TokenKind::AssignShiftLeft,
            TokenKind::AssignShiftRight => TokenKind::AssignShiftRight,
            TokenKind::AssignUnsignedShiftRight =>
                TokenKind::AssignUnsignedShiftRight,
            TokenKind::QuestionMark => TokenKind::QuestionMark,
            TokenKind::Colon => TokenKind::Colon,
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for TokenKind {
    #[inline]
    fn eq(&self, other: &TokenKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TokenKind::Keyword(__self_0), TokenKind::Keyword(__arg1_0))
                    => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TokenKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Keyword>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for TokenKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            TokenKind::Keyword(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            _ => {}
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TokenKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TokenKind::Eof =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 0u32, "Eof"),
                    TokenKind::Identifier =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 1u32, "Identifier"),
                    TokenKind::Integer =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 2u32, "Integer"),
                    TokenKind::HexInteger =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 3u32, "HexInteger"),
                    TokenKind::BinaryInteger =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 4u32, "BinaryInteger"),
                    TokenKind::OctalInteger =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 5u32, "OctalInteger"),
                    TokenKind::Float =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 6u32, "Float"),
                    TokenKind::String =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 7u32, "String"),
                    TokenKind::HashedString =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 8u32, "HashedString"),
                    TokenKind::Keyword(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TokenKind", 9u32, "Keyword", __field0),
                    TokenKind::Divide =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 10u32, "Divide"),
                    TokenKind::LogicalAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 11u32, "LogicalAnd"),
                    TokenKind::LogicalOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 12u32, "LogicalOr"),
                    TokenKind::Minus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 13u32, "Minus"),
                    TokenKind::LeftBrace =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 14u32, "LeftBrace"),
                    TokenKind::RightBrace =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 15u32, "RightBrace"),
                    TokenKind::LeftParen =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 16u32, "LeftParen"),
                    TokenKind::RightParen =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 17u32, "RightParen"),
                    TokenKind::Semicolon =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 18u32, "Semicolon"),
                    TokenKind::Comma =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 19u32, "Comma"),
                    TokenKind::GreaterEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 20u32, "GreaterEqual"),
                    TokenKind::LessEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 21u32, "LessEqual"),
                    TokenKind::GreaterThan =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 22u32, "GreaterThan"),
                    TokenKind::LessThan =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 23u32, "LessThan"),
                    TokenKind::NotEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 24u32, "NotEqual"),
                    TokenKind::EqualEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 25u32, "EqualEqual"),
                    TokenKind::Plus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 26u32, "Plus"),
                    TokenKind::Modulus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 27u32, "Modulus"),
                    TokenKind::Assign =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 28u32, "Assign"),
                    TokenKind::InclusiveOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 29u32, "InclusiveOr"),
                    TokenKind::ExclusiveOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 30u32, "ExclusiveOr"),
                    TokenKind::BooleanAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 31u32, "BooleanAnd"),
                    TokenKind::ShiftLeft =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 32u32, "ShiftLeft"),
                    TokenKind::ShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 33u32, "ShiftRight"),
                    TokenKind::Multiply =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 34u32, "Multiply"),
                    TokenKind::UnsignedShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 35u32, "UnsignedShiftRight"),
                    TokenKind::Tilde =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 36u32, "Tilde"),
                    TokenKind::StructurePartSpecify =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 37u32, "StructurePartSpecify"),
                    TokenKind::BooleanNot =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 38u32, "BooleanNot"),
                    TokenKind::LeftSquareBracket =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 39u32, "LeftSquareBracket"),
                    TokenKind::RightSquareBracket =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 40u32, "RightSquareBracket"),
                    TokenKind::Increment =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 41u32, "Increment"),
                    TokenKind::Decrement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 42u32, "Decrement"),
                    TokenKind::AssignMinus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 43u32, "AssignMinus"),
                    TokenKind::AssignPlus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 44u32, "AssignPlus"),
                    TokenKind::AssignMultiply =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 45u32, "AssignMultiply"),
                    TokenKind::AssignDivide =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 46u32, "AssignDivide"),
                    TokenKind::AssignModulus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 47u32, "AssignModulus"),
                    TokenKind::AssignAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 48u32, "AssignAnd"),
                    TokenKind::AssignXor =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 49u32, "AssignXor"),
                    TokenKind::AssignOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 50u32, "AssignOr"),
                    TokenKind::AssignShiftLeft =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 51u32, "AssignShiftLeft"),
                    TokenKind::AssignShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 52u32, "AssignShiftRight"),
                    TokenKind::AssignUnsignedShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 53u32, "AssignUnsignedShiftRight"),
                    TokenKind::QuestionMark =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 54u32, "QuestionMark"),
                    TokenKind::Colon =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TokenKind", 55u32, "Colon"),
                }
            }
        }
    };Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for TokenKind {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                    __field6,
                    __field7,
                    __field8,
                    __field9,
                    __field10,
                    __field11,
                    __field12,
                    __field13,
                    __field14,
                    __field15,
                    __field16,
                    __field17,
                    __field18,
                    __field19,
                    __field20,
                    __field21,
                    __field22,
                    __field23,
                    __field24,
                    __field25,
                    __field26,
                    __field27,
                    __field28,
                    __field29,
                    __field30,
                    __field31,
                    __field32,
                    __field33,
                    __field34,
                    __field35,
                    __field36,
                    __field37,
                    __field38,
                    __field39,
                    __field40,
                    __field41,
                    __field42,
                    __field43,
                    __field44,
                    __field45,
                    __field46,
                    __field47,
                    __field48,
                    __field49,
                    __field50,
                    __field51,
                    __field52,
                    __field53,
                    __field54,
                    __field55,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            6u64 => _serde::__private228::Ok(__Field::__field6),
                            7u64 => _serde::__private228::Ok(__Field::__field7),
                            8u64 => _serde::__private228::Ok(__Field::__field8),
                            9u64 => _serde::__private228::Ok(__Field::__field9),
                            10u64 => _serde::__private228::Ok(__Field::__field10),
                            11u64 => _serde::__private228::Ok(__Field::__field11),
                            12u64 => _serde::__private228::Ok(__Field::__field12),
                            13u64 => _serde::__private228::Ok(__Field::__field13),
                            14u64 => _serde::__private228::Ok(__Field::__field14),
                            15u64 => _serde::__private228::Ok(__Field::__field15),
                            16u64 => _serde::__private228::Ok(__Field::__field16),
                            17u64 => _serde::__private228::Ok(__Field::__field17),
                            18u64 => _serde::__private228::Ok(__Field::__field18),
                            19u64 => _serde::__private228::Ok(__Field::__field19),
                            20u64 => _serde::__private228::Ok(__Field::__field20),
                            21u64 => _serde::__private228::Ok(__Field::__field21),
                            22u64 => _serde::__private228::Ok(__Field::__field22),
                            23u64 => _serde::__private228::Ok(__Field::__field23),
                            24u64 => _serde::__private228::Ok(__Field::__field24),
                            25u64 => _serde::__private228::Ok(__Field::__field25),
                            26u64 => _serde::__private228::Ok(__Field::__field26),
                            27u64 => _serde::__private228::Ok(__Field::__field27),
                            28u64 => _serde::__private228::Ok(__Field::__field28),
                            29u64 => _serde::__private228::Ok(__Field::__field29),
                            30u64 => _serde::__private228::Ok(__Field::__field30),
                            31u64 => _serde::__private228::Ok(__Field::__field31),
                            32u64 => _serde::__private228::Ok(__Field::__field32),
                            33u64 => _serde::__private228::Ok(__Field::__field33),
                            34u64 => _serde::__private228::Ok(__Field::__field34),
                            35u64 => _serde::__private228::Ok(__Field::__field35),
                            36u64 => _serde::__private228::Ok(__Field::__field36),
                            37u64 => _serde::__private228::Ok(__Field::__field37),
                            38u64 => _serde::__private228::Ok(__Field::__field38),
                            39u64 => _serde::__private228::Ok(__Field::__field39),
                            40u64 => _serde::__private228::Ok(__Field::__field40),
                            41u64 => _serde::__private228::Ok(__Field::__field41),
                            42u64 => _serde::__private228::Ok(__Field::__field42),
                            43u64 => _serde::__private228::Ok(__Field::__field43),
                            44u64 => _serde::__private228::Ok(__Field::__field44),
                            45u64 => _serde::__private228::Ok(__Field::__field45),
                            46u64 => _serde::__private228::Ok(__Field::__field46),
                            47u64 => _serde::__private228::Ok(__Field::__field47),
                            48u64 => _serde::__private228::Ok(__Field::__field48),
                            49u64 => _serde::__private228::Ok(__Field::__field49),
                            50u64 => _serde::__private228::Ok(__Field::__field50),
                            51u64 => _serde::__private228::Ok(__Field::__field51),
                            52u64 => _serde::__private228::Ok(__Field::__field52),
                            53u64 => _serde::__private228::Ok(__Field::__field53),
                            54u64 => _serde::__private228::Ok(__Field::__field54),
                            55u64 => _serde::__private228::Ok(__Field::__field55),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 56")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Eof" => _serde::__private228::Ok(__Field::__field0),
                            "Identifier" => _serde::__private228::Ok(__Field::__field1),
                            "Integer" => _serde::__private228::Ok(__Field::__field2),
                            "HexInteger" => _serde::__private228::Ok(__Field::__field3),
                            "BinaryInteger" =>
                                _serde::__private228::Ok(__Field::__field4),
                            "OctalInteger" =>
                                _serde::__private228::Ok(__Field::__field5),
                            "Float" => _serde::__private228::Ok(__Field::__field6),
                            "String" => _serde::__private228::Ok(__Field::__field7),
                            "HashedString" =>
                                _serde::__private228::Ok(__Field::__field8),
                            "Keyword" => _serde::__private228::Ok(__Field::__field9),
                            "Divide" => _serde::__private228::Ok(__Field::__field10),
                            "LogicalAnd" =>
                                _serde::__private228::Ok(__Field::__field11),
                            "LogicalOr" => _serde::__private228::Ok(__Field::__field12),
                            "Minus" => _serde::__private228::Ok(__Field::__field13),
                            "LeftBrace" => _serde::__private228::Ok(__Field::__field14),
                            "RightBrace" =>
                                _serde::__private228::Ok(__Field::__field15),
                            "LeftParen" => _serde::__private228::Ok(__Field::__field16),
                            "RightParen" =>
                                _serde::__private228::Ok(__Field::__field17),
                            "Semicolon" => _serde::__private228::Ok(__Field::__field18),
                            "Comma" => _serde::__private228::Ok(__Field::__field19),
                            "GreaterEqual" =>
                                _serde::__private228::Ok(__Field::__field20),
                            "LessEqual" => _serde::__private228::Ok(__Field::__field21),
                            "GreaterThan" =>
                                _serde::__private228::Ok(__Field::__field22),
                            "LessThan" => _serde::__private228::Ok(__Field::__field23),
                            "NotEqual" => _serde::__private228::Ok(__Field::__field24),
                            "EqualEqual" =>
                                _serde::__private228::Ok(__Field::__field25),
                            "Plus" => _serde::__private228::Ok(__Field::__field26),
                            "Modulus" => _serde::__private228::Ok(__Field::__field27),
                            "Assign" => _serde::__private228::Ok(__Field::__field28),
                            "InclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field29),
                            "ExclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field30),
                            "BooleanAnd" =>
                                _serde::__private228::Ok(__Field::__field31),
                            "ShiftLeft" => _serde::__private228::Ok(__Field::__field32),
                            "ShiftRight" =>
                                _serde::__private228::Ok(__Field::__field33),
                            "Multiply" => _serde::__private228::Ok(__Field::__field34),
                            "UnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field35),
                            "Tilde" => _serde::__private228::Ok(__Field::__field36),
                            "StructurePartSpecify" =>
                                _serde::__private228::Ok(__Field::__field37),
                            "BooleanNot" =>
                                _serde::__private228::Ok(__Field::__field38),
                            "LeftSquareBracket" =>
                                _serde::__private228::Ok(__Field::__field39),
                            "RightSquareBracket" =>
                                _serde::__private228::Ok(__Field::__field40),
                            "Increment" => _serde::__private228::Ok(__Field::__field41),
                            "Decrement" => _serde::__private228::Ok(__Field::__field42),
                            "AssignMinus" =>
                                _serde::__private228::Ok(__Field::__field43),
                            "AssignPlus" =>
                                _serde::__private228::Ok(__Field::__field44),
                            "AssignMultiply" =>
                                _serde::__private228::Ok(__Field::__field45),
                            "AssignDivide" =>
                                _serde::__private228::Ok(__Field::__field46),
                            "AssignModulus" =>
                                _serde::__private228::Ok(__Field::__field47),
                            "AssignAnd" => _serde::__private228::Ok(__Field::__field48),
                            "AssignXor" => _serde::__private228::Ok(__Field::__field49),
                            "AssignOr" => _serde::__private228::Ok(__Field::__field50),
                            "AssignShiftLeft" =>
                                _serde::__private228::Ok(__Field::__field51),
                            "AssignShiftRight" =>
                                _serde::__private228::Ok(__Field::__field52),
                            "AssignUnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field53),
                            "QuestionMark" =>
                                _serde::__private228::Ok(__Field::__field54),
                            "Colon" => _serde::__private228::Ok(__Field::__field55),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Eof" => _serde::__private228::Ok(__Field::__field0),
                            b"Identifier" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"Integer" => _serde::__private228::Ok(__Field::__field2),
                            b"HexInteger" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"BinaryInteger" =>
                                _serde::__private228::Ok(__Field::__field4),
                            b"OctalInteger" =>
                                _serde::__private228::Ok(__Field::__field5),
                            b"Float" => _serde::__private228::Ok(__Field::__field6),
                            b"String" => _serde::__private228::Ok(__Field::__field7),
                            b"HashedString" =>
                                _serde::__private228::Ok(__Field::__field8),
                            b"Keyword" => _serde::__private228::Ok(__Field::__field9),
                            b"Divide" => _serde::__private228::Ok(__Field::__field10),
                            b"LogicalAnd" =>
                                _serde::__private228::Ok(__Field::__field11),
                            b"LogicalOr" =>
                                _serde::__private228::Ok(__Field::__field12),
                            b"Minus" => _serde::__private228::Ok(__Field::__field13),
                            b"LeftBrace" =>
                                _serde::__private228::Ok(__Field::__field14),
                            b"RightBrace" =>
                                _serde::__private228::Ok(__Field::__field15),
                            b"LeftParen" =>
                                _serde::__private228::Ok(__Field::__field16),
                            b"RightParen" =>
                                _serde::__private228::Ok(__Field::__field17),
                            b"Semicolon" =>
                                _serde::__private228::Ok(__Field::__field18),
                            b"Comma" => _serde::__private228::Ok(__Field::__field19),
                            b"GreaterEqual" =>
                                _serde::__private228::Ok(__Field::__field20),
                            b"LessEqual" =>
                                _serde::__private228::Ok(__Field::__field21),
                            b"GreaterThan" =>
                                _serde::__private228::Ok(__Field::__field22),
                            b"LessThan" => _serde::__private228::Ok(__Field::__field23),
                            b"NotEqual" => _serde::__private228::Ok(__Field::__field24),
                            b"EqualEqual" =>
                                _serde::__private228::Ok(__Field::__field25),
                            b"Plus" => _serde::__private228::Ok(__Field::__field26),
                            b"Modulus" => _serde::__private228::Ok(__Field::__field27),
                            b"Assign" => _serde::__private228::Ok(__Field::__field28),
                            b"InclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field29),
                            b"ExclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field30),
                            b"BooleanAnd" =>
                                _serde::__private228::Ok(__Field::__field31),
                            b"ShiftLeft" =>
                                _serde::__private228::Ok(__Field::__field32),
                            b"ShiftRight" =>
                                _serde::__private228::Ok(__Field::__field33),
                            b"Multiply" => _serde::__private228::Ok(__Field::__field34),
                            b"UnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field35),
                            b"Tilde" => _serde::__private228::Ok(__Field::__field36),
                            b"StructurePartSpecify" =>
                                _serde::__private228::Ok(__Field::__field37),
                            b"BooleanNot" =>
                                _serde::__private228::Ok(__Field::__field38),
                            b"LeftSquareBracket" =>
                                _serde::__private228::Ok(__Field::__field39),
                            b"RightSquareBracket" =>
                                _serde::__private228::Ok(__Field::__field40),
                            b"Increment" =>
                                _serde::__private228::Ok(__Field::__field41),
                            b"Decrement" =>
                                _serde::__private228::Ok(__Field::__field42),
                            b"AssignMinus" =>
                                _serde::__private228::Ok(__Field::__field43),
                            b"AssignPlus" =>
                                _serde::__private228::Ok(__Field::__field44),
                            b"AssignMultiply" =>
                                _serde::__private228::Ok(__Field::__field45),
                            b"AssignDivide" =>
                                _serde::__private228::Ok(__Field::__field46),
                            b"AssignModulus" =>
                                _serde::__private228::Ok(__Field::__field47),
                            b"AssignAnd" =>
                                _serde::__private228::Ok(__Field::__field48),
                            b"AssignXor" =>
                                _serde::__private228::Ok(__Field::__field49),
                            b"AssignOr" => _serde::__private228::Ok(__Field::__field50),
                            b"AssignShiftLeft" =>
                                _serde::__private228::Ok(__Field::__field51),
                            b"AssignShiftRight" =>
                                _serde::__private228::Ok(__Field::__field52),
                            b"AssignUnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field53),
                            b"QuestionMark" =>
                                _serde::__private228::Ok(__Field::__field54),
                            b"Colon" => _serde::__private228::Ok(__Field::__field55),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<TokenKind>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = TokenKind;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum TokenKind")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Eof)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Identifier)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Integer)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::HexInteger)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::BinaryInteger)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::OctalInteger)
                            }
                            (__Field::__field6, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Float)
                            }
                            (__Field::__field7, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::String)
                            }
                            (__Field::__field8, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::HashedString)
                            }
                            (__Field::__field9, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Keyword>(__variant),
                                    TokenKind::Keyword),
                            (__Field::__field10, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Divide)
                            }
                            (__Field::__field11, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LogicalAnd)
                            }
                            (__Field::__field12, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LogicalOr)
                            }
                            (__Field::__field13, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Minus)
                            }
                            (__Field::__field14, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LeftBrace)
                            }
                            (__Field::__field15, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::RightBrace)
                            }
                            (__Field::__field16, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LeftParen)
                            }
                            (__Field::__field17, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::RightParen)
                            }
                            (__Field::__field18, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Semicolon)
                            }
                            (__Field::__field19, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Comma)
                            }
                            (__Field::__field20, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::GreaterEqual)
                            }
                            (__Field::__field21, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LessEqual)
                            }
                            (__Field::__field22, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::GreaterThan)
                            }
                            (__Field::__field23, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LessThan)
                            }
                            (__Field::__field24, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::NotEqual)
                            }
                            (__Field::__field25, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::EqualEqual)
                            }
                            (__Field::__field26, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Plus)
                            }
                            (__Field::__field27, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Modulus)
                            }
                            (__Field::__field28, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Assign)
                            }
                            (__Field::__field29, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::InclusiveOr)
                            }
                            (__Field::__field30, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::ExclusiveOr)
                            }
                            (__Field::__field31, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::BooleanAnd)
                            }
                            (__Field::__field32, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::ShiftLeft)
                            }
                            (__Field::__field33, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::ShiftRight)
                            }
                            (__Field::__field34, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Multiply)
                            }
                            (__Field::__field35, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::UnsignedShiftRight)
                            }
                            (__Field::__field36, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Tilde)
                            }
                            (__Field::__field37, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::StructurePartSpecify)
                            }
                            (__Field::__field38, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::BooleanNot)
                            }
                            (__Field::__field39, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::LeftSquareBracket)
                            }
                            (__Field::__field40, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::RightSquareBracket)
                            }
                            (__Field::__field41, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Increment)
                            }
                            (__Field::__field42, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Decrement)
                            }
                            (__Field::__field43, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignMinus)
                            }
                            (__Field::__field44, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignPlus)
                            }
                            (__Field::__field45, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignMultiply)
                            }
                            (__Field::__field46, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignDivide)
                            }
                            (__Field::__field47, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignModulus)
                            }
                            (__Field::__field48, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignAnd)
                            }
                            (__Field::__field49, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignXor)
                            }
                            (__Field::__field50, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignOr)
                            }
                            (__Field::__field51, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignShiftLeft)
                            }
                            (__Field::__field52, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignShiftRight)
                            }
                            (__Field::__field53, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::AssignUnsignedShiftRight)
                            }
                            (__Field::__field54, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::QuestionMark)
                            }
                            (__Field::__field55, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TokenKind::Colon)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Eof", "Identifier", "Integer", "HexInteger",
                                "BinaryInteger", "OctalInteger", "Float", "String",
                                "HashedString", "Keyword", "Divide", "LogicalAnd",
                                "LogicalOr", "Minus", "LeftBrace", "RightBrace",
                                "LeftParen", "RightParen", "Semicolon", "Comma",
                                "GreaterEqual", "LessEqual", "GreaterThan", "LessThan",
                                "NotEqual", "EqualEqual", "Plus", "Modulus", "Assign",
                                "InclusiveOr", "ExclusiveOr", "BooleanAnd", "ShiftLeft",
                                "ShiftRight", "Multiply", "UnsignedShiftRight", "Tilde",
                                "StructurePartSpecify", "BooleanNot", "LeftSquareBracket",
                                "RightSquareBracket", "Increment", "Decrement",
                                "AssignMinus", "AssignPlus", "AssignMultiply",
                                "AssignDivide", "AssignModulus", "AssignAnd", "AssignXor",
                                "AssignOr", "AssignShiftLeft", "AssignShiftRight",
                                "AssignUnsignedShiftRight", "QuestionMark", "Colon"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "TokenKind", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<TokenKind>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
232pub enum TokenKind {
233    /// End of file.
234    Eof,
235    /// An unqualified identifier.
236    Identifier,
237    /// A decimal integer literal.
238    Integer,
239    /// A hexadecimal integer literal.
240    HexInteger,
241    /// A binary integer literal.
242    BinaryInteger,
243    /// An octal integer literal.
244    OctalInteger,
245    /// A floating-point literal.
246    Float,
247    /// A cooked string literal, including raw-string inputs.
248    String,
249    /// A cooked hashed string literal.
250    ///
251    /// The upstream lexer lowers these to `HexInteger` tokens immediately, so
252    /// this variant is retained only as shared vocabulary.
253    HashedString,
254    /// One recognized keyword.
255    Keyword(Keyword),
256    /// `/`
257    Divide,
258    /// `&&`
259    LogicalAnd,
260    /// `||`
261    LogicalOr,
262    /// `-`
263    Minus,
264    /// `{`
265    LeftBrace,
266    /// `}`
267    RightBrace,
268    /// `(`
269    LeftParen,
270    /// `)`
271    RightParen,
272    /// `;`
273    Semicolon,
274    /// `,`
275    Comma,
276    /// `>=`
277    GreaterEqual,
278    /// `<=`
279    LessEqual,
280    /// `>`
281    GreaterThan,
282    /// `<`
283    LessThan,
284    /// `!=`
285    NotEqual,
286    /// `==`
287    EqualEqual,
288    /// `+`
289    Plus,
290    /// `%`
291    Modulus,
292    /// `=`
293    Assign,
294    /// `|`
295    InclusiveOr,
296    /// `^`
297    ExclusiveOr,
298    /// `&`
299    BooleanAnd,
300    /// `<<`
301    ShiftLeft,
302    /// `>>`
303    ShiftRight,
304    /// `*`
305    Multiply,
306    /// `>>>`
307    UnsignedShiftRight,
308    /// `~`
309    Tilde,
310    /// `.`
311    StructurePartSpecify,
312    /// `!`
313    BooleanNot,
314    /// `[`
315    LeftSquareBracket,
316    /// `]`
317    RightSquareBracket,
318    /// `++`
319    Increment,
320    /// `--`
321    Decrement,
322    /// `-=`
323    AssignMinus,
324    /// `+=`
325    AssignPlus,
326    /// `*=`
327    AssignMultiply,
328    /// `/=`
329    AssignDivide,
330    /// `%=`
331    AssignModulus,
332    /// `&=`
333    AssignAnd,
334    /// `^=`
335    AssignXor,
336    /// `|=`
337    AssignOr,
338    /// `<<=`
339    AssignShiftLeft,
340    /// `>>=`
341    AssignShiftRight,
342    /// `>>>=`
343    AssignUnsignedShiftRight,
344    /// `?`
345    QuestionMark,
346    /// `:`
347    Colon,
348}
349
350/// One token plus its source span and normalized payload.
351#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Token {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "Token", "kind",
            &self.kind, "span", &self.span, "text", &&self.text)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Token {
    #[inline]
    fn clone(&self) -> Token {
        Token {
            kind: ::core::clone::Clone::clone(&self.kind),
            span: ::core::clone::Clone::clone(&self.span),
            text: ::core::clone::Clone::clone(&self.text),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Token {
    #[inline]
    fn eq(&self, other: &Token) -> bool {
        self.kind == other.kind && self.span == other.span &&
            self.text == other.text
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Token {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TokenKind>;
        let _: ::core::cmp::AssertParamIsEq<Span>;
        let _: ::core::cmp::AssertParamIsEq<String>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Token {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.kind, state);
        ::core::hash::Hash::hash(&self.span, state);
        ::core::hash::Hash::hash(&self.text, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Token {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer, "Token",
                            false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "text", &self.text)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for Token {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, __ignore, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "kind" => _serde::__private228::Ok(__Field::__field0),
                            "span" => _serde::__private228::Ok(__Field::__field1),
                            "text" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"kind" => _serde::__private228::Ok(__Field::__field0),
                            b"span" => _serde::__private228::Ok(__Field::__field1),
                            b"text" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<Token>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Token;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Token")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<TokenKind>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Token with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Token with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct Token with 3 elements")),
                            };
                        _serde::__private228::Ok(Token {
                                kind: __field0,
                                span: __field1,
                                text: __field2,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<TokenKind> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Span> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("kind"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TokenKind>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("span"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("text"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("kind")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("span")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("text")?,
                            };
                        _serde::__private228::Ok(Token {
                                kind: __field0,
                                span: __field1,
                                text: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["kind", "span", "text"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Token", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Token>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
352pub struct Token {
353    /// Token kind.
354    pub kind: TokenKind,
355    /// Source span covering the original token text.
356    pub span: Span,
357    /// Normalized token payload.
358    pub text: String,
359}
360
361impl Token {
362    /// Creates a new token.
363    pub fn new(kind: TokenKind, span: Span, text: impl Into<String>) -> Self {
364        Self {
365            kind,
366            span,
367            text: text.into(),
368        }
369    }
370}
371
372#[cfg(test)]
373mod tests {
374    use super::{Keyword, TokenKind};
375
376    #[test]
377    fn resolves_keyword_table_entries_from_upstream() {
378        assert_eq!(Keyword::from_lexeme("#include"), Some(Keyword::Include));
379        assert_eq!(
380            Keyword::from_lexeme("ENGINE_STRUCTURE_3"),
381            Some(Keyword::EngineStructureDefinition)
382        );
383        assert_eq!(Keyword::from_lexeme("__TIME__"), Some(Keyword::TimeMacro));
384        assert_eq!(Keyword::from_lexeme("not_a_keyword"), None);
385    }
386
387    #[test]
388    fn keyword_token_code_matches_upstream_header() {
389        assert_eq!(Keyword::Include.upstream_token_code(), 57);
390        assert_eq!(Keyword::JsonTrue.upstream_token_code(), 111);
391        assert_eq!(Keyword::TimeMacro.upstream_token_code(), 121);
392    }
393
394    #[test]
395    fn token_kind_equality_handles_keyword_payload() {
396        assert_eq!(
397            TokenKind::Keyword(Keyword::If),
398            TokenKind::Keyword(Keyword::If)
399        );
400    }
401}