Skip to main content

nwnrs_nwscript/
ast.rs

1use serde::{Deserialize, Serialize};
2
3use crate::source::Span;
4
5/// One parsed `NWScript` translation unit.
6#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Script {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "Script",
            "items", &&self.items)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Script {
    #[inline]
    fn clone(&self) -> Script {
        Script { items: ::core::clone::Clone::clone(&self.items) }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Script {
    #[inline]
    fn eq(&self, other: &Script) -> bool { self.items == other.items }
}PartialEq, #[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 Script {
            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, "Script",
                            false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "items", &self.items)?;
                _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 Script {
            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, __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),
                            _ => _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 {
                            "items" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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"items" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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<Script>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Script;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Script")
                    }
                    #[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::<Vec<TopLevelItem>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Script with 1 element")),
                            };
                        _serde::__private228::Ok(Script { items: __field0 })
                    }
                    #[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<Vec<TopLevelItem>> =
                            _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("items"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<TopLevelItem>>(&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("items")?,
                            };
                        _serde::__private228::Ok(Script { items: __field0 })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["items"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Script", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Script>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
7pub struct Script {
8    /// Top-level items in source order.
9    pub items: Vec<TopLevelItem>,
10}
11
12/// One top-level `NWScript` item.
13#[derive(#[automatically_derived]
impl ::core::fmt::Debug for TopLevelItem {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TopLevelItem::Include(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Include", &__self_0),
            TopLevelItem::Global(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Global",
                    &__self_0),
            TopLevelItem::Function(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Function", &__self_0),
            TopLevelItem::Struct(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Struct",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for TopLevelItem {
    #[inline]
    fn clone(&self) -> TopLevelItem {
        match self {
            TopLevelItem::Include(__self_0) =>
                TopLevelItem::Include(::core::clone::Clone::clone(__self_0)),
            TopLevelItem::Global(__self_0) =>
                TopLevelItem::Global(::core::clone::Clone::clone(__self_0)),
            TopLevelItem::Function(__self_0) =>
                TopLevelItem::Function(::core::clone::Clone::clone(__self_0)),
            TopLevelItem::Struct(__self_0) =>
                TopLevelItem::Struct(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for TopLevelItem {
    #[inline]
    fn eq(&self, other: &TopLevelItem) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TopLevelItem::Include(__self_0),
                    TopLevelItem::Include(__arg1_0)) => __self_0 == __arg1_0,
                (TopLevelItem::Global(__self_0),
                    TopLevelItem::Global(__arg1_0)) => __self_0 == __arg1_0,
                (TopLevelItem::Function(__self_0),
                    TopLevelItem::Function(__arg1_0)) => __self_0 == __arg1_0,
                (TopLevelItem::Struct(__self_0),
                    TopLevelItem::Struct(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[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 TopLevelItem {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TopLevelItem::Include(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TopLevelItem", 0u32, "Include", __field0),
                    TopLevelItem::Global(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TopLevelItem", 1u32, "Global", __field0),
                    TopLevelItem::Function(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TopLevelItem", 2u32, "Function", __field0),
                    TopLevelItem::Struct(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TopLevelItem", 3u32, "Struct", __field0),
                }
            }
        }
    };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 TopLevelItem {
            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, }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 4")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Include" => _serde::__private228::Ok(__Field::__field0),
                            "Global" => _serde::__private228::Ok(__Field::__field1),
                            "Function" => _serde::__private228::Ok(__Field::__field2),
                            "Struct" => _serde::__private228::Ok(__Field::__field3),
                            _ => {
                                _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"Include" => _serde::__private228::Ok(__Field::__field0),
                            b"Global" => _serde::__private228::Ok(__Field::__field1),
                            b"Function" => _serde::__private228::Ok(__Field::__field2),
                            b"Struct" => _serde::__private228::Ok(__Field::__field3),
                            _ => {
                                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<TopLevelItem>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = TopLevelItem;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum TopLevelItem")
                    }
                    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::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<IncludeDirective>(__variant),
                                    TopLevelItem::Include),
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Declaration>(__variant),
                                    TopLevelItem::Global),
                            (__Field::__field2, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<FunctionDecl>(__variant),
                                    TopLevelItem::Function),
                            (__Field::__field3, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<StructDecl>(__variant),
                                    TopLevelItem::Struct),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Include", "Global", "Function", "Struct"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "TopLevelItem", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<TopLevelItem>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
14pub enum TopLevelItem {
15    /// One `#include "..."` directive.
16    Include(IncludeDirective),
17    /// One global variable declaration statement.
18    Global(Declaration),
19    /// One function declaration or definition.
20    Function(FunctionDecl),
21    /// One user-defined `struct`.
22    Struct(StructDecl),
23}
24
25/// One `#include "..."` directive.
26#[derive(#[automatically_derived]
impl ::core::fmt::Debug for IncludeDirective {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "IncludeDirective", "span", &self.span, "path", &&self.path)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for IncludeDirective {
    #[inline]
    fn clone(&self) -> IncludeDirective {
        IncludeDirective {
            span: ::core::clone::Clone::clone(&self.span),
            path: ::core::clone::Clone::clone(&self.path),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for IncludeDirective {
    #[inline]
    fn eq(&self, other: &IncludeDirective) -> bool {
        self.span == other.span && self.path == other.path
    }
}PartialEq, #[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 IncludeDirective {
            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,
                            "IncludeDirective", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "path", &self.path)?;
                _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 IncludeDirective {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "path" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"path" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<IncludeDirective>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = IncludeDirective;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct IncludeDirective")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct IncludeDirective with 2 elements")),
                            };
                        let __field1 =
                            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(1usize,
                                                &"struct IncludeDirective with 2 elements")),
                            };
                        _serde::__private228::Ok(IncludeDirective {
                                span: __field0,
                                path: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("path"));
                                    }
                                    __field1 =
                                        _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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("path")?,
                            };
                        _serde::__private228::Ok(IncludeDirective {
                                span: __field0,
                                path: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "path"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "IncludeDirective", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<IncludeDirective>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
27pub struct IncludeDirective {
28    /// Source span covering the directive.
29    pub span: Span,
30    /// Included script path payload.
31    pub path: String,
32}
33
34/// One parsed function declaration or definition.
35#[derive(#[automatically_derived]
impl ::core::fmt::Debug for FunctionDecl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f, "FunctionDecl",
            "span", &self.span, "return_type", &self.return_type, "name",
            &self.name, "parameters", &self.parameters, "body", &&self.body)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for FunctionDecl {
    #[inline]
    fn clone(&self) -> FunctionDecl {
        FunctionDecl {
            span: ::core::clone::Clone::clone(&self.span),
            return_type: ::core::clone::Clone::clone(&self.return_type),
            name: ::core::clone::Clone::clone(&self.name),
            parameters: ::core::clone::Clone::clone(&self.parameters),
            body: ::core::clone::Clone::clone(&self.body),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for FunctionDecl {
    #[inline]
    fn eq(&self, other: &FunctionDecl) -> bool {
        self.span == other.span && self.return_type == other.return_type &&
                    self.name == other.name &&
                self.parameters == other.parameters && self.body == other.body
    }
}PartialEq, #[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 FunctionDecl {
            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,
                            "FunctionDecl", false as usize + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "return_type", &self.return_type)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "parameters", &self.parameters)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "body", &self.body)?;
                _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 FunctionDecl {
            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,
                    __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),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "return_type" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "name" => _serde::__private228::Ok(__Field::__field2),
                            "parameters" => _serde::__private228::Ok(__Field::__field3),
                            "body" => _serde::__private228::Ok(__Field::__field4),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"return_type" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"name" => _serde::__private228::Ok(__Field::__field2),
                            b"parameters" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"body" => _serde::__private228::Ok(__Field::__field4),
                            _ => { _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<FunctionDecl>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = FunctionDecl;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct FunctionDecl")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct FunctionDecl with 5 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<TypeSpec>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct FunctionDecl with 5 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 FunctionDecl with 5 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<Vec<Parameter>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct FunctionDecl with 5 elements")),
                            };
                        let __field4 =
                            match _serde::de::SeqAccess::next_element::<Option<BlockStmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct FunctionDecl with 5 elements")),
                            };
                        _serde::__private228::Ok(FunctionDecl {
                                span: __field0,
                                return_type: __field1,
                                name: __field2,
                                parameters: __field3,
                                body: __field4,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<TypeSpec> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<Vec<Parameter>> =
                            _serde::__private228::None;
                        let mut __field4:
                                _serde::__private228::Option<Option<BlockStmt>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("return_type"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TypeSpec>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("parameters"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<Parameter>>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private228::Option::is_some(&__field4) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("body"));
                                    }
                                    __field4 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<BlockStmt>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("return_type")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("parameters")?,
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private228::Some(__field4) => __field4,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("body")?,
                            };
                        _serde::__private228::Ok(FunctionDecl {
                                span: __field0,
                                return_type: __field1,
                                name: __field2,
                                parameters: __field3,
                                body: __field4,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "return_type", "name", "parameters", "body"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "FunctionDecl", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<FunctionDecl>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
36pub struct FunctionDecl {
37    /// Source span covering the whole declaration or definition.
38    pub span:        Span,
39    /// Function return type.
40    pub return_type: TypeSpec,
41    /// Function name.
42    pub name:        String,
43    /// Function parameters in source order.
44    pub parameters:  Vec<Parameter>,
45    /// Optional function body. `None` means this was only a declaration.
46    pub body:        Option<BlockStmt>,
47}
48
49/// One user-defined structure declaration.
50#[derive(#[automatically_derived]
impl ::core::fmt::Debug for StructDecl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "StructDecl",
            "span", &self.span, "name", &self.name, "fields", &&self.fields)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for StructDecl {
    #[inline]
    fn clone(&self) -> StructDecl {
        StructDecl {
            span: ::core::clone::Clone::clone(&self.span),
            name: ::core::clone::Clone::clone(&self.name),
            fields: ::core::clone::Clone::clone(&self.fields),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for StructDecl {
    #[inline]
    fn eq(&self, other: &StructDecl) -> bool {
        self.span == other.span && self.name == other.name &&
            self.fields == other.fields
    }
}PartialEq, #[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 StructDecl {
            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,
                            "StructDecl", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "fields", &self.fields)?;
                _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 StructDecl {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "name" => _serde::__private228::Ok(__Field::__field1),
                            "fields" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"name" => _serde::__private228::Ok(__Field::__field1),
                            b"fields" => _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<StructDecl>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = StructDecl;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct StructDecl")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct StructDecl with 3 elements")),
                            };
                        let __field1 =
                            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(1usize,
                                                &"struct StructDecl with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Vec<StructFieldDecl>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct StructDecl with 3 elements")),
                            };
                        _serde::__private228::Ok(StructDecl {
                                span: __field0,
                                name: __field1,
                                fields: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Vec<StructFieldDecl>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("fields"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<StructFieldDecl>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("fields")?,
                            };
                        _serde::__private228::Ok(StructDecl {
                                span: __field0,
                                name: __field1,
                                fields: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "name", "fields"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "StructDecl", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<StructDecl>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
51pub struct StructDecl {
52    /// Source span covering the whole declaration.
53    pub span:   Span,
54    /// Structure name.
55    pub name:   String,
56    /// Field declarations in source order.
57    pub fields: Vec<StructFieldDecl>,
58}
59
60/// One structure field declaration statement.
61#[derive(#[automatically_derived]
impl ::core::fmt::Debug for StructFieldDecl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "StructFieldDecl", "span", &self.span, "ty", &self.ty, "names",
            &&self.names)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for StructFieldDecl {
    #[inline]
    fn clone(&self) -> StructFieldDecl {
        StructFieldDecl {
            span: ::core::clone::Clone::clone(&self.span),
            ty: ::core::clone::Clone::clone(&self.ty),
            names: ::core::clone::Clone::clone(&self.names),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for StructFieldDecl {
    #[inline]
    fn eq(&self, other: &StructFieldDecl) -> bool {
        self.span == other.span && self.ty == other.ty &&
            self.names == other.names
    }
}PartialEq, #[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 StructFieldDecl {
            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,
                            "StructFieldDecl", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ty", &self.ty)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "names", &self.names)?;
                _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 StructFieldDecl {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "ty" => _serde::__private228::Ok(__Field::__field1),
                            "names" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"ty" => _serde::__private228::Ok(__Field::__field1),
                            b"names" => _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<StructFieldDecl>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = StructFieldDecl;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct StructFieldDecl")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct StructFieldDecl with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<TypeSpec>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct StructFieldDecl with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Vec<NamedItem>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct StructFieldDecl with 3 elements")),
                            };
                        _serde::__private228::Ok(StructFieldDecl {
                                span: __field0,
                                ty: __field1,
                                names: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<TypeSpec> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Vec<NamedItem>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("ty"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TypeSpec>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("names"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<NamedItem>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("ty")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("names")?,
                            };
                        _serde::__private228::Ok(StructFieldDecl {
                                span: __field0,
                                ty: __field1,
                                names: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "ty", "names"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "StructFieldDecl", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<StructFieldDecl>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
62pub struct StructFieldDecl {
63    /// Source span covering the declaration.
64    pub span:  Span,
65    /// Field type.
66    pub ty:    TypeSpec,
67    /// Field names declared by this statement.
68    pub names: Vec<NamedItem>,
69}
70
71/// One variable or field name plus span.
72#[derive(#[automatically_derived]
impl ::core::fmt::Debug for NamedItem {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "NamedItem",
            "span", &self.span, "name", &&self.name)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for NamedItem {
    #[inline]
    fn clone(&self) -> NamedItem {
        NamedItem {
            span: ::core::clone::Clone::clone(&self.span),
            name: ::core::clone::Clone::clone(&self.name),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for NamedItem {
    #[inline]
    fn eq(&self, other: &NamedItem) -> bool {
        self.span == other.span && self.name == other.name
    }
}PartialEq, #[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 NamedItem {
            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,
                            "NamedItem", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _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 NamedItem {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "name" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"name" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<NamedItem>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = NamedItem;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct NamedItem")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct NamedItem with 2 elements")),
                            };
                        let __field1 =
                            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(1usize,
                                                &"struct NamedItem with 2 elements")),
                            };
                        _serde::__private228::Ok(NamedItem {
                                span: __field0,
                                name: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field1 =
                                        _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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        _serde::__private228::Ok(NamedItem {
                                span: __field0,
                                name: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "name"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "NamedItem", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<NamedItem>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
73pub struct NamedItem {
74    /// Source span covering the identifier.
75    pub span: Span,
76    /// Identifier text.
77    pub name: String,
78}
79
80/// One parsed parameter declaration.
81#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Parameter {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "Parameter",
            "span", &self.span, "ty", &self.ty, "name", &self.name, "default",
            &&self.default)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Parameter {
    #[inline]
    fn clone(&self) -> Parameter {
        Parameter {
            span: ::core::clone::Clone::clone(&self.span),
            ty: ::core::clone::Clone::clone(&self.ty),
            name: ::core::clone::Clone::clone(&self.name),
            default: ::core::clone::Clone::clone(&self.default),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Parameter {
    #[inline]
    fn eq(&self, other: &Parameter) -> bool {
        self.span == other.span && self.ty == other.ty &&
                self.name == other.name && self.default == other.default
    }
}PartialEq, #[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 Parameter {
            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,
                            "Parameter", false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ty", &self.ty)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "default", &self.default)?;
                _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 Parameter {
            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,
                    __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),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "ty" => _serde::__private228::Ok(__Field::__field1),
                            "name" => _serde::__private228::Ok(__Field::__field2),
                            "default" => _serde::__private228::Ok(__Field::__field3),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"ty" => _serde::__private228::Ok(__Field::__field1),
                            b"name" => _serde::__private228::Ok(__Field::__field2),
                            b"default" => _serde::__private228::Ok(__Field::__field3),
                            _ => { _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<Parameter>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Parameter;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Parameter")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Parameter with 4 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<TypeSpec>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Parameter with 4 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 Parameter with 4 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct Parameter with 4 elements")),
                            };
                        _serde::__private228::Ok(Parameter {
                                span: __field0,
                                ty: __field1,
                                name: __field2,
                                default: __field3,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<TypeSpec> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<Option<Expr>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("ty"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TypeSpec>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("default"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("ty")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("default")?,
                            };
                        _serde::__private228::Ok(Parameter {
                                span: __field0,
                                ty: __field1,
                                name: __field2,
                                default: __field3,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "ty", "name", "default"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Parameter", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Parameter>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
82pub struct Parameter {
83    /// Source span covering the declaration.
84    pub span:    Span,
85    /// Parameter type.
86    pub ty:      TypeSpec,
87    /// Parameter name.
88    pub name:    String,
89    /// Optional default value expression.
90    pub default: Option<Expr>,
91}
92
93/// One parsed type specifier.
94#[derive(#[automatically_derived]
impl ::core::fmt::Debug for TypeSpec {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "TypeSpec",
            "span", &self.span, "is_const", &self.is_const, "kind",
            &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for TypeSpec {
    #[inline]
    fn clone(&self) -> TypeSpec {
        TypeSpec {
            span: ::core::clone::Clone::clone(&self.span),
            is_const: ::core::clone::Clone::clone(&self.is_const),
            kind: ::core::clone::Clone::clone(&self.kind),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for TypeSpec {
    #[inline]
    fn eq(&self, other: &TypeSpec) -> bool {
        self.is_const == other.is_const && self.span == other.span &&
            self.kind == other.kind
    }
}PartialEq, #[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 TypeSpec {
            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,
                            "TypeSpec", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "is_const", &self.is_const)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _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 TypeSpec {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "is_const" => _serde::__private228::Ok(__Field::__field1),
                            "kind" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"is_const" => _serde::__private228::Ok(__Field::__field1),
                            b"kind" => _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<TypeSpec>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = TypeSpec;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct TypeSpec")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct TypeSpec with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct TypeSpec with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<TypeKind>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct TypeSpec with 3 elements")),
                            };
                        _serde::__private228::Ok(TypeSpec {
                                span: __field0,
                                is_const: __field1,
                                kind: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<TypeKind> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("is_const"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("kind"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TypeKind>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("is_const")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("kind")?,
                            };
                        _serde::__private228::Ok(TypeSpec {
                                span: __field0,
                                is_const: __field1,
                                kind: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "is_const", "kind"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "TypeSpec", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<TypeSpec>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
95pub struct TypeSpec {
96    /// Source span covering the type specifier.
97    pub span:     Span,
98    /// Whether `const` was present.
99    pub is_const: bool,
100    /// Underlying type shape.
101    pub kind:     TypeKind,
102}
103
104/// One `NWScript` type kind recognized syntactically by the parser.
105#[derive(#[automatically_derived]
impl ::core::fmt::Debug for TypeKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TypeKind::Void => ::core::fmt::Formatter::write_str(f, "Void"),
            TypeKind::Int => ::core::fmt::Formatter::write_str(f, "Int"),
            TypeKind::Float => ::core::fmt::Formatter::write_str(f, "Float"),
            TypeKind::String =>
                ::core::fmt::Formatter::write_str(f, "String"),
            TypeKind::Object =>
                ::core::fmt::Formatter::write_str(f, "Object"),
            TypeKind::Vector =>
                ::core::fmt::Formatter::write_str(f, "Vector"),
            TypeKind::Struct(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Struct",
                    &__self_0),
            TypeKind::EngineStructure(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "EngineStructure", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for TypeKind {
    #[inline]
    fn clone(&self) -> TypeKind {
        match self {
            TypeKind::Void => TypeKind::Void,
            TypeKind::Int => TypeKind::Int,
            TypeKind::Float => TypeKind::Float,
            TypeKind::String => TypeKind::String,
            TypeKind::Object => TypeKind::Object,
            TypeKind::Vector => TypeKind::Vector,
            TypeKind::Struct(__self_0) =>
                TypeKind::Struct(::core::clone::Clone::clone(__self_0)),
            TypeKind::EngineStructure(__self_0) =>
                TypeKind::EngineStructure(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for TypeKind {
    #[inline]
    fn eq(&self, other: &TypeKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TypeKind::Struct(__self_0), TypeKind::Struct(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (TypeKind::EngineStructure(__self_0),
                    TypeKind::EngineStructure(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[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 TypeKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TypeKind::Void =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 0u32, "Void"),
                    TypeKind::Int =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 1u32, "Int"),
                    TypeKind::Float =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 2u32, "Float"),
                    TypeKind::String =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 3u32, "String"),
                    TypeKind::Object =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 4u32, "Object"),
                    TypeKind::Vector =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TypeKind", 5u32, "Vector"),
                    TypeKind::Struct(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TypeKind", 6u32, "Struct", __field0),
                    TypeKind::EngineStructure(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TypeKind", 7u32, "EngineStructure", __field0),
                }
            }
        }
    };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 TypeKind {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 8")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Void" => _serde::__private228::Ok(__Field::__field0),
                            "Int" => _serde::__private228::Ok(__Field::__field1),
                            "Float" => _serde::__private228::Ok(__Field::__field2),
                            "String" => _serde::__private228::Ok(__Field::__field3),
                            "Object" => _serde::__private228::Ok(__Field::__field4),
                            "Vector" => _serde::__private228::Ok(__Field::__field5),
                            "Struct" => _serde::__private228::Ok(__Field::__field6),
                            "EngineStructure" =>
                                _serde::__private228::Ok(__Field::__field7),
                            _ => {
                                _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"Void" => _serde::__private228::Ok(__Field::__field0),
                            b"Int" => _serde::__private228::Ok(__Field::__field1),
                            b"Float" => _serde::__private228::Ok(__Field::__field2),
                            b"String" => _serde::__private228::Ok(__Field::__field3),
                            b"Object" => _serde::__private228::Ok(__Field::__field4),
                            b"Vector" => _serde::__private228::Ok(__Field::__field5),
                            b"Struct" => _serde::__private228::Ok(__Field::__field6),
                            b"EngineStructure" =>
                                _serde::__private228::Ok(__Field::__field7),
                            _ => {
                                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<TypeKind>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = TypeKind;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum TypeKind")
                    }
                    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(TypeKind::Void)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TypeKind::Int)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TypeKind::Float)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TypeKind::String)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TypeKind::Object)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(TypeKind::Vector)
                            }
                            (__Field::__field6, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
                                    TypeKind::Struct),
                            (__Field::__field7, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
                                    TypeKind::EngineStructure),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Void", "Int", "Float", "String", "Object", "Vector",
                                "Struct", "EngineStructure"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "TypeKind", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<TypeKind>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
106pub enum TypeKind {
107    /// `void`
108    Void,
109    /// `int`
110    Int,
111    /// `float`
112    Float,
113    /// `string`
114    String,
115    /// `object`
116    Object,
117    /// `vector`
118    Vector,
119    /// `struct name`
120    Struct(String),
121    /// One builtin engine structure such as `effect` or `json`.
122    EngineStructure(String),
123}
124
125/// One variable declaration statement.
126#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Declaration {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "Declaration",
            "span", &self.span, "ty", &self.ty, "declarators",
            &&self.declarators)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Declaration {
    #[inline]
    fn clone(&self) -> Declaration {
        Declaration {
            span: ::core::clone::Clone::clone(&self.span),
            ty: ::core::clone::Clone::clone(&self.ty),
            declarators: ::core::clone::Clone::clone(&self.declarators),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Declaration {
    #[inline]
    fn eq(&self, other: &Declaration) -> bool {
        self.span == other.span && self.ty == other.ty &&
            self.declarators == other.declarators
    }
}PartialEq, #[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 Declaration {
            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,
                            "Declaration", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ty", &self.ty)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "declarators", &self.declarators)?;
                _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 Declaration {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "ty" => _serde::__private228::Ok(__Field::__field1),
                            "declarators" =>
                                _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"ty" => _serde::__private228::Ok(__Field::__field1),
                            b"declarators" =>
                                _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<Declaration>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Declaration;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Declaration")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Declaration with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<TypeSpec>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Declaration with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Vec<VarDeclarator>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct Declaration with 3 elements")),
                            };
                        _serde::__private228::Ok(Declaration {
                                span: __field0,
                                ty: __field1,
                                declarators: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<TypeSpec> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Vec<VarDeclarator>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("ty"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<TypeSpec>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("declarators"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<VarDeclarator>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("ty")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("declarators")?,
                            };
                        _serde::__private228::Ok(Declaration {
                                span: __field0,
                                ty: __field1,
                                declarators: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "ty", "declarators"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Declaration", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Declaration>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
127pub struct Declaration {
128    /// Source span covering the whole declaration.
129    pub span:        Span,
130    /// Declared type.
131    pub ty:          TypeSpec,
132    /// Declared variables.
133    pub declarators: Vec<VarDeclarator>,
134}
135
136/// One declared variable, optionally with an initializer.
137#[derive(#[automatically_derived]
impl ::core::fmt::Debug for VarDeclarator {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "VarDeclarator",
            "span", &self.span, "name", &self.name, "initializer",
            &&self.initializer)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for VarDeclarator {
    #[inline]
    fn clone(&self) -> VarDeclarator {
        VarDeclarator {
            span: ::core::clone::Clone::clone(&self.span),
            name: ::core::clone::Clone::clone(&self.name),
            initializer: ::core::clone::Clone::clone(&self.initializer),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for VarDeclarator {
    #[inline]
    fn eq(&self, other: &VarDeclarator) -> bool {
        self.span == other.span && self.name == other.name &&
            self.initializer == other.initializer
    }
}PartialEq, #[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 VarDeclarator {
            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,
                            "VarDeclarator", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "initializer", &self.initializer)?;
                _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 VarDeclarator {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "name" => _serde::__private228::Ok(__Field::__field1),
                            "initializer" =>
                                _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"name" => _serde::__private228::Ok(__Field::__field1),
                            b"initializer" =>
                                _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<VarDeclarator>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = VarDeclarator;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct VarDeclarator")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct VarDeclarator with 3 elements")),
                            };
                        let __field1 =
                            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(1usize,
                                                &"struct VarDeclarator with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct VarDeclarator with 3 elements")),
                            };
                        _serde::__private228::Ok(VarDeclarator {
                                span: __field0,
                                name: __field1,
                                initializer: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Option<Expr>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("initializer"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("initializer")?,
                            };
                        _serde::__private228::Ok(VarDeclarator {
                                span: __field0,
                                name: __field1,
                                initializer: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "name", "initializer"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "VarDeclarator", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<VarDeclarator>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
138pub struct VarDeclarator {
139    /// Source span covering the declarator.
140    pub span:        Span,
141    /// Variable name.
142    pub name:        String,
143    /// Optional initializer expression.
144    pub initializer: Option<Expr>,
145}
146
147/// One compound block.
148#[derive(#[automatically_derived]
impl ::core::fmt::Debug for BlockStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "BlockStmt",
            "span", &self.span, "statements", &&self.statements)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for BlockStmt {
    #[inline]
    fn clone(&self) -> BlockStmt {
        BlockStmt {
            span: ::core::clone::Clone::clone(&self.span),
            statements: ::core::clone::Clone::clone(&self.statements),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for BlockStmt {
    #[inline]
    fn eq(&self, other: &BlockStmt) -> bool {
        self.span == other.span && self.statements == other.statements
    }
}PartialEq, #[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 BlockStmt {
            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,
                            "BlockStmt", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "statements", &self.statements)?;
                _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 BlockStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "statements" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"statements" =>
                                _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<BlockStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = BlockStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct BlockStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct BlockStmt with 2 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Vec<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct BlockStmt with 2 elements")),
                            };
                        _serde::__private228::Ok(BlockStmt {
                                span: __field0,
                                statements: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Vec<Stmt>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("statements"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<Stmt>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("statements")?,
                            };
                        _serde::__private228::Ok(BlockStmt {
                                span: __field0,
                                statements: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "statements"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "BlockStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<BlockStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
149pub struct BlockStmt {
150    /// Source span covering the block braces and contents.
151    pub span:       Span,
152    /// Statements inside the block.
153    pub statements: Vec<Stmt>,
154}
155
156/// One statement in `NWScript` source.
157#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Stmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            Stmt::Block(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Block",
                    &__self_0),
            Stmt::Declaration(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Declaration", &__self_0),
            Stmt::Expression(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Expression", &__self_0),
            Stmt::If(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "If",
                    &__self_0),
            Stmt::Switch(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Switch",
                    &__self_0),
            Stmt::Return(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Return",
                    &__self_0),
            Stmt::While(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "While",
                    &__self_0),
            Stmt::DoWhile(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "DoWhile", &__self_0),
            Stmt::For(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "For",
                    &__self_0),
            Stmt::Case(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Case",
                    &__self_0),
            Stmt::Default(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Default", &__self_0),
            Stmt::Break(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Break",
                    &__self_0),
            Stmt::Continue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Continue", &__self_0),
            Stmt::Empty(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Empty",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Stmt {
    #[inline]
    fn clone(&self) -> Stmt {
        match self {
            Stmt::Block(__self_0) =>
                Stmt::Block(::core::clone::Clone::clone(__self_0)),
            Stmt::Declaration(__self_0) =>
                Stmt::Declaration(::core::clone::Clone::clone(__self_0)),
            Stmt::Expression(__self_0) =>
                Stmt::Expression(::core::clone::Clone::clone(__self_0)),
            Stmt::If(__self_0) =>
                Stmt::If(::core::clone::Clone::clone(__self_0)),
            Stmt::Switch(__self_0) =>
                Stmt::Switch(::core::clone::Clone::clone(__self_0)),
            Stmt::Return(__self_0) =>
                Stmt::Return(::core::clone::Clone::clone(__self_0)),
            Stmt::While(__self_0) =>
                Stmt::While(::core::clone::Clone::clone(__self_0)),
            Stmt::DoWhile(__self_0) =>
                Stmt::DoWhile(::core::clone::Clone::clone(__self_0)),
            Stmt::For(__self_0) =>
                Stmt::For(::core::clone::Clone::clone(__self_0)),
            Stmt::Case(__self_0) =>
                Stmt::Case(::core::clone::Clone::clone(__self_0)),
            Stmt::Default(__self_0) =>
                Stmt::Default(::core::clone::Clone::clone(__self_0)),
            Stmt::Break(__self_0) =>
                Stmt::Break(::core::clone::Clone::clone(__self_0)),
            Stmt::Continue(__self_0) =>
                Stmt::Continue(::core::clone::Clone::clone(__self_0)),
            Stmt::Empty(__self_0) =>
                Stmt::Empty(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Stmt {
    #[inline]
    fn eq(&self, other: &Stmt) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (Stmt::Block(__self_0), Stmt::Block(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Declaration(__self_0), Stmt::Declaration(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Expression(__self_0), Stmt::Expression(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::If(__self_0), Stmt::If(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Switch(__self_0), Stmt::Switch(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Return(__self_0), Stmt::Return(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::While(__self_0), Stmt::While(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::DoWhile(__self_0), Stmt::DoWhile(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::For(__self_0), Stmt::For(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Case(__self_0), Stmt::Case(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Default(__self_0), Stmt::Default(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Break(__self_0), Stmt::Break(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Continue(__self_0), Stmt::Continue(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Stmt::Empty(__self_0), Stmt::Empty(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[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 Stmt {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Stmt::Block(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 0u32, "Block", __field0),
                    Stmt::Declaration(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 1u32, "Declaration", __field0),
                    Stmt::Expression(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 2u32, "Expression", __field0),
                    Stmt::If(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 3u32, "If", __field0),
                    Stmt::Switch(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 4u32, "Switch", __field0),
                    Stmt::Return(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 5u32, "Return", __field0),
                    Stmt::While(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 6u32, "While", __field0),
                    Stmt::DoWhile(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 7u32, "DoWhile", __field0),
                    Stmt::For(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 8u32, "For", __field0),
                    Stmt::Case(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 9u32, "Case", __field0),
                    Stmt::Default(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 10u32, "Default", __field0),
                    Stmt::Break(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 11u32, "Break", __field0),
                    Stmt::Continue(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 12u32, "Continue", __field0),
                    Stmt::Empty(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Stmt", 13u32, "Empty", __field0),
                }
            }
        }
    };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 Stmt {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 14")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Block" => _serde::__private228::Ok(__Field::__field0),
                            "Declaration" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "Expression" => _serde::__private228::Ok(__Field::__field2),
                            "If" => _serde::__private228::Ok(__Field::__field3),
                            "Switch" => _serde::__private228::Ok(__Field::__field4),
                            "Return" => _serde::__private228::Ok(__Field::__field5),
                            "While" => _serde::__private228::Ok(__Field::__field6),
                            "DoWhile" => _serde::__private228::Ok(__Field::__field7),
                            "For" => _serde::__private228::Ok(__Field::__field8),
                            "Case" => _serde::__private228::Ok(__Field::__field9),
                            "Default" => _serde::__private228::Ok(__Field::__field10),
                            "Break" => _serde::__private228::Ok(__Field::__field11),
                            "Continue" => _serde::__private228::Ok(__Field::__field12),
                            "Empty" => _serde::__private228::Ok(__Field::__field13),
                            _ => {
                                _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"Block" => _serde::__private228::Ok(__Field::__field0),
                            b"Declaration" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"Expression" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"If" => _serde::__private228::Ok(__Field::__field3),
                            b"Switch" => _serde::__private228::Ok(__Field::__field4),
                            b"Return" => _serde::__private228::Ok(__Field::__field5),
                            b"While" => _serde::__private228::Ok(__Field::__field6),
                            b"DoWhile" => _serde::__private228::Ok(__Field::__field7),
                            b"For" => _serde::__private228::Ok(__Field::__field8),
                            b"Case" => _serde::__private228::Ok(__Field::__field9),
                            b"Default" => _serde::__private228::Ok(__Field::__field10),
                            b"Break" => _serde::__private228::Ok(__Field::__field11),
                            b"Continue" => _serde::__private228::Ok(__Field::__field12),
                            b"Empty" => _serde::__private228::Ok(__Field::__field13),
                            _ => {
                                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<Stmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Stmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum Stmt")
                    }
                    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::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<BlockStmt>(__variant),
                                    Stmt::Block),
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Declaration>(__variant),
                                    Stmt::Declaration),
                            (__Field::__field2, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<ExpressionStmt>(__variant),
                                    Stmt::Expression),
                            (__Field::__field3, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<IfStmt>(__variant),
                                    Stmt::If),
                            (__Field::__field4, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<SwitchStmt>(__variant),
                                    Stmt::Switch),
                            (__Field::__field5, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<ReturnStmt>(__variant),
                                    Stmt::Return),
                            (__Field::__field6, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<WhileStmt>(__variant),
                                    Stmt::While),
                            (__Field::__field7, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<DoWhileStmt>(__variant),
                                    Stmt::DoWhile),
                            (__Field::__field8, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<ForStmt>(__variant),
                                    Stmt::For),
                            (__Field::__field9, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<CaseStmt>(__variant),
                                    Stmt::Case),
                            (__Field::__field10, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<DefaultStmt>(__variant),
                                    Stmt::Default),
                            (__Field::__field11, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<SimpleStmt>(__variant),
                                    Stmt::Break),
                            (__Field::__field12, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<SimpleStmt>(__variant),
                                    Stmt::Continue),
                            (__Field::__field13, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<SimpleStmt>(__variant),
                                    Stmt::Empty),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Block", "Declaration", "Expression", "If", "Switch",
                                "Return", "While", "DoWhile", "For", "Case", "Default",
                                "Break", "Continue", "Empty"];
                _serde::Deserializer::deserialize_enum(__deserializer, "Stmt",
                    VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Stmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
158pub enum Stmt {
159    /// `{ ... }`
160    Block(BlockStmt),
161    /// One declaration statement.
162    Declaration(Declaration),
163    /// One expression statement.
164    Expression(ExpressionStmt),
165    /// `if (...) ... [else ...]`
166    If(IfStmt),
167    /// `switch (...) ...`
168    Switch(SwitchStmt),
169    /// `return [expr];`
170    Return(ReturnStmt),
171    /// `while (...) ...`
172    While(WhileStmt),
173    /// `do ... while (...);`
174    DoWhile(DoWhileStmt),
175    /// `for (...; ...; ...) ...`
176    For(ForStmt),
177    /// `case expr:`
178    Case(CaseStmt),
179    /// `default:`
180    Default(DefaultStmt),
181    /// `break;`
182    Break(SimpleStmt),
183    /// `continue;`
184    Continue(SimpleStmt),
185    /// `;`
186    Empty(SimpleStmt),
187}
188
189/// One statement carrying only a span.
190#[derive(#[automatically_derived]
impl ::core::fmt::Debug for SimpleStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "SimpleStmt",
            "span", &&self.span)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SimpleStmt {
    #[inline]
    fn clone(&self) -> SimpleStmt {
        SimpleStmt { span: ::core::clone::Clone::clone(&self.span) }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for SimpleStmt {
    #[inline]
    fn eq(&self, other: &SimpleStmt) -> bool { self.span == other.span }
}PartialEq, #[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 SimpleStmt {
            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,
                            "SimpleStmt", false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _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 SimpleStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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<SimpleStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = SimpleStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct SimpleStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct SimpleStmt with 1 element")),
                            };
                        _serde::__private228::Ok(SimpleStmt { span: __field0 })
                    }
                    #[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<Span> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&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("span")?,
                            };
                        _serde::__private228::Ok(SimpleStmt { span: __field0 })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "SimpleStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<SimpleStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
191pub struct SimpleStmt {
192    /// Source span covering the statement.
193    pub span: Span,
194}
195
196/// One expression statement.
197#[derive(#[automatically_derived]
impl ::core::fmt::Debug for ExpressionStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ExpressionStmt", "span", &self.span, "expr", &&self.expr)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ExpressionStmt {
    #[inline]
    fn clone(&self) -> ExpressionStmt {
        ExpressionStmt {
            span: ::core::clone::Clone::clone(&self.span),
            expr: ::core::clone::Clone::clone(&self.expr),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for ExpressionStmt {
    #[inline]
    fn eq(&self, other: &ExpressionStmt) -> bool {
        self.span == other.span && self.expr == other.expr
    }
}PartialEq, #[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 ExpressionStmt {
            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,
                            "ExpressionStmt", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "expr", &self.expr)?;
                _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 ExpressionStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "expr" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"expr" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<ExpressionStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = ExpressionStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct ExpressionStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct ExpressionStmt with 2 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct ExpressionStmt with 2 elements")),
                            };
                        _serde::__private228::Ok(ExpressionStmt {
                                span: __field0,
                                expr: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Expr> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("expr"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("expr")?,
                            };
                        _serde::__private228::Ok(ExpressionStmt {
                                span: __field0,
                                expr: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "expr"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "ExpressionStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<ExpressionStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
198pub struct ExpressionStmt {
199    /// Source span covering the statement.
200    pub span: Span,
201    /// Parsed expression.
202    pub expr: Expr,
203}
204
205/// One `if` statement.
206#[derive(#[automatically_derived]
impl ::core::fmt::Debug for IfStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "IfStmt",
            "span", &self.span, "condition", &self.condition, "then_branch",
            &self.then_branch, "else_branch", &&self.else_branch)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for IfStmt {
    #[inline]
    fn clone(&self) -> IfStmt {
        IfStmt {
            span: ::core::clone::Clone::clone(&self.span),
            condition: ::core::clone::Clone::clone(&self.condition),
            then_branch: ::core::clone::Clone::clone(&self.then_branch),
            else_branch: ::core::clone::Clone::clone(&self.else_branch),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for IfStmt {
    #[inline]
    fn eq(&self, other: &IfStmt) -> bool {
        self.span == other.span && self.condition == other.condition &&
                self.then_branch == other.then_branch &&
            self.else_branch == other.else_branch
    }
}PartialEq, #[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 IfStmt {
            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, "IfStmt",
                            false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "condition", &self.condition)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "then_branch", &self.then_branch)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "else_branch", &self.else_branch)?;
                _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 IfStmt {
            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,
                    __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),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "condition" => _serde::__private228::Ok(__Field::__field1),
                            "then_branch" =>
                                _serde::__private228::Ok(__Field::__field2),
                            "else_branch" =>
                                _serde::__private228::Ok(__Field::__field3),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"condition" => _serde::__private228::Ok(__Field::__field1),
                            b"then_branch" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"else_branch" =>
                                _serde::__private228::Ok(__Field::__field3),
                            _ => { _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<IfStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = IfStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct IfStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct IfStmt with 4 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct IfStmt with 4 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Box<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct IfStmt with 4 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<Option<Box<Stmt>>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct IfStmt with 4 elements")),
                            };
                        _serde::__private228::Ok(IfStmt {
                                span: __field0,
                                condition: __field1,
                                then_branch: __field2,
                                else_branch: __field3,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Expr> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<Box<Stmt>> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<Option<Box<Stmt>>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("condition"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("then_branch"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Stmt>>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("else_branch"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Box<Stmt>>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("condition")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("then_branch")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("else_branch")?,
                            };
                        _serde::__private228::Ok(IfStmt {
                                span: __field0,
                                condition: __field1,
                                then_branch: __field2,
                                else_branch: __field3,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "condition", "then_branch", "else_branch"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "IfStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<IfStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
207pub struct IfStmt {
208    /// Source span covering the whole statement.
209    pub span:        Span,
210    /// Condition expression.
211    pub condition:   Expr,
212    /// Statement executed when the condition is true.
213    pub then_branch: Box<Stmt>,
214    /// Optional `else` branch.
215    pub else_branch: Option<Box<Stmt>>,
216}
217
218/// One `switch` statement.
219#[derive(#[automatically_derived]
impl ::core::fmt::Debug for SwitchStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "SwitchStmt",
            "span", &self.span, "condition", &self.condition, "body",
            &&self.body)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SwitchStmt {
    #[inline]
    fn clone(&self) -> SwitchStmt {
        SwitchStmt {
            span: ::core::clone::Clone::clone(&self.span),
            condition: ::core::clone::Clone::clone(&self.condition),
            body: ::core::clone::Clone::clone(&self.body),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for SwitchStmt {
    #[inline]
    fn eq(&self, other: &SwitchStmt) -> bool {
        self.span == other.span && self.condition == other.condition &&
            self.body == other.body
    }
}PartialEq, #[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 SwitchStmt {
            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,
                            "SwitchStmt", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "condition", &self.condition)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "body", &self.body)?;
                _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 SwitchStmt {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "condition" => _serde::__private228::Ok(__Field::__field1),
                            "body" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"condition" => _serde::__private228::Ok(__Field::__field1),
                            b"body" => _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<SwitchStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = SwitchStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct SwitchStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct SwitchStmt with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct SwitchStmt with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Box<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct SwitchStmt with 3 elements")),
                            };
                        _serde::__private228::Ok(SwitchStmt {
                                span: __field0,
                                condition: __field1,
                                body: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Expr> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<Box<Stmt>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("condition"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("body"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Stmt>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("condition")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("body")?,
                            };
                        _serde::__private228::Ok(SwitchStmt {
                                span: __field0,
                                condition: __field1,
                                body: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "condition", "body"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "SwitchStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<SwitchStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
220pub struct SwitchStmt {
221    /// Source span covering the whole statement.
222    pub span:      Span,
223    /// Condition expression.
224    pub condition: Expr,
225    /// Switch body.
226    pub body:      Box<Stmt>,
227}
228
229/// One `return` statement.
230#[derive(#[automatically_derived]
impl ::core::fmt::Debug for ReturnStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ReturnStmt",
            "span", &self.span, "value", &&self.value)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ReturnStmt {
    #[inline]
    fn clone(&self) -> ReturnStmt {
        ReturnStmt {
            span: ::core::clone::Clone::clone(&self.span),
            value: ::core::clone::Clone::clone(&self.value),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for ReturnStmt {
    #[inline]
    fn eq(&self, other: &ReturnStmt) -> bool {
        self.span == other.span && self.value == other.value
    }
}PartialEq, #[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 ReturnStmt {
            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,
                            "ReturnStmt", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "value", &self.value)?;
                _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 ReturnStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "value" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"value" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<ReturnStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = ReturnStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct ReturnStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct ReturnStmt with 2 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct ReturnStmt with 2 elements")),
                            };
                        _serde::__private228::Ok(ReturnStmt {
                                span: __field0,
                                value: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1:
                                _serde::__private228::Option<Option<Expr>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("value"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("value")?,
                            };
                        _serde::__private228::Ok(ReturnStmt {
                                span: __field0,
                                value: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "value"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "ReturnStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<ReturnStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
231pub struct ReturnStmt {
232    /// Source span covering the statement.
233    pub span:  Span,
234    /// Optional returned value.
235    pub value: Option<Expr>,
236}
237
238/// One `while` statement.
239#[derive(#[automatically_derived]
impl ::core::fmt::Debug for WhileStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "WhileStmt",
            "span", &self.span, "condition", &self.condition, "body",
            &&self.body)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WhileStmt {
    #[inline]
    fn clone(&self) -> WhileStmt {
        WhileStmt {
            span: ::core::clone::Clone::clone(&self.span),
            condition: ::core::clone::Clone::clone(&self.condition),
            body: ::core::clone::Clone::clone(&self.body),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for WhileStmt {
    #[inline]
    fn eq(&self, other: &WhileStmt) -> bool {
        self.span == other.span && self.condition == other.condition &&
            self.body == other.body
    }
}PartialEq, #[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 WhileStmt {
            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,
                            "WhileStmt", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "condition", &self.condition)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "body", &self.body)?;
                _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 WhileStmt {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "condition" => _serde::__private228::Ok(__Field::__field1),
                            "body" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"condition" => _serde::__private228::Ok(__Field::__field1),
                            b"body" => _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<WhileStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WhileStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct WhileStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct WhileStmt with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct WhileStmt with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Box<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct WhileStmt with 3 elements")),
                            };
                        _serde::__private228::Ok(WhileStmt {
                                span: __field0,
                                condition: __field1,
                                body: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Expr> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<Box<Stmt>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("condition"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("body"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Stmt>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("condition")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("body")?,
                            };
                        _serde::__private228::Ok(WhileStmt {
                                span: __field0,
                                condition: __field1,
                                body: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "condition", "body"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "WhileStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WhileStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
240pub struct WhileStmt {
241    /// Source span covering the whole statement.
242    pub span:      Span,
243    /// Loop condition.
244    pub condition: Expr,
245    /// Loop body.
246    pub body:      Box<Stmt>,
247}
248
249/// One `do ... while` statement.
250#[derive(#[automatically_derived]
impl ::core::fmt::Debug for DoWhileStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "DoWhileStmt",
            "span", &self.span, "body", &self.body, "condition",
            &&self.condition)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for DoWhileStmt {
    #[inline]
    fn clone(&self) -> DoWhileStmt {
        DoWhileStmt {
            span: ::core::clone::Clone::clone(&self.span),
            body: ::core::clone::Clone::clone(&self.body),
            condition: ::core::clone::Clone::clone(&self.condition),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for DoWhileStmt {
    #[inline]
    fn eq(&self, other: &DoWhileStmt) -> bool {
        self.span == other.span && self.body == other.body &&
            self.condition == other.condition
    }
}PartialEq, #[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 DoWhileStmt {
            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,
                            "DoWhileStmt", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "body", &self.body)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "condition", &self.condition)?;
                _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 DoWhileStmt {
            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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "body" => _serde::__private228::Ok(__Field::__field1),
                            "condition" => _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"body" => _serde::__private228::Ok(__Field::__field1),
                            b"condition" => _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<DoWhileStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = DoWhileStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct DoWhileStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct DoWhileStmt with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Box<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct DoWhileStmt with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct DoWhileStmt with 3 elements")),
                            };
                        _serde::__private228::Ok(DoWhileStmt {
                                span: __field0,
                                body: __field1,
                                condition: __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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Box<Stmt>> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<Expr> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("body"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Stmt>>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("condition"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("body")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("condition")?,
                            };
                        _serde::__private228::Ok(DoWhileStmt {
                                span: __field0,
                                body: __field1,
                                condition: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "body", "condition"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "DoWhileStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<DoWhileStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
251pub struct DoWhileStmt {
252    /// Source span covering the whole statement.
253    pub span:      Span,
254    /// Loop body.
255    pub body:      Box<Stmt>,
256    /// Loop condition.
257    pub condition: Expr,
258}
259
260/// One `for` statement.
261#[derive(#[automatically_derived]
impl ::core::fmt::Debug for ForStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f, "ForStmt",
            "span", &self.span, "initializer", &self.initializer, "condition",
            &self.condition, "update", &self.update, "body", &&self.body)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ForStmt {
    #[inline]
    fn clone(&self) -> ForStmt {
        ForStmt {
            span: ::core::clone::Clone::clone(&self.span),
            initializer: ::core::clone::Clone::clone(&self.initializer),
            condition: ::core::clone::Clone::clone(&self.condition),
            update: ::core::clone::Clone::clone(&self.update),
            body: ::core::clone::Clone::clone(&self.body),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for ForStmt {
    #[inline]
    fn eq(&self, other: &ForStmt) -> bool {
        self.span == other.span && self.initializer == other.initializer &&
                    self.condition == other.condition &&
                self.update == other.update && self.body == other.body
    }
}PartialEq, #[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 ForStmt {
            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,
                            "ForStmt", false as usize + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "initializer", &self.initializer)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "condition", &self.condition)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "update", &self.update)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "body", &self.body)?;
                _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 ForStmt {
            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,
                    __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),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "initializer" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "condition" => _serde::__private228::Ok(__Field::__field2),
                            "update" => _serde::__private228::Ok(__Field::__field3),
                            "body" => _serde::__private228::Ok(__Field::__field4),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"initializer" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"condition" => _serde::__private228::Ok(__Field::__field2),
                            b"update" => _serde::__private228::Ok(__Field::__field3),
                            b"body" => _serde::__private228::Ok(__Field::__field4),
                            _ => { _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<ForStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = ForStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct ForStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct ForStmt with 5 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct ForStmt with 5 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct ForStmt with 5 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<Option<Expr>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct ForStmt with 5 elements")),
                            };
                        let __field4 =
                            match _serde::de::SeqAccess::next_element::<Box<Stmt>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct ForStmt with 5 elements")),
                            };
                        _serde::__private228::Ok(ForStmt {
                                span: __field0,
                                initializer: __field1,
                                condition: __field2,
                                update: __field3,
                                body: __field4,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1:
                                _serde::__private228::Option<Option<Expr>> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Option<Expr>> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<Option<Expr>> =
                            _serde::__private228::None;
                        let mut __field4: _serde::__private228::Option<Box<Stmt>> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("initializer"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("condition"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("update"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Expr>>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private228::Option::is_some(&__field4) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("body"));
                                    }
                                    __field4 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Stmt>>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("initializer")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("condition")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("update")?,
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private228::Some(__field4) => __field4,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("body")?,
                            };
                        _serde::__private228::Ok(ForStmt {
                                span: __field0,
                                initializer: __field1,
                                condition: __field2,
                                update: __field3,
                                body: __field4,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["span", "initializer", "condition", "update", "body"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "ForStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<ForStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
262pub struct ForStmt {
263    /// Source span covering the whole statement.
264    pub span:        Span,
265    /// Optional initializer expression.
266    pub initializer: Option<Expr>,
267    /// Optional loop condition.
268    pub condition:   Option<Expr>,
269    /// Optional update expression.
270    pub update:      Option<Expr>,
271    /// Loop body.
272    pub body:        Box<Stmt>,
273}
274
275/// One `case` label.
276#[derive(#[automatically_derived]
impl ::core::fmt::Debug for CaseStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "CaseStmt",
            "span", &self.span, "value", &&self.value)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for CaseStmt {
    #[inline]
    fn clone(&self) -> CaseStmt {
        CaseStmt {
            span: ::core::clone::Clone::clone(&self.span),
            value: ::core::clone::Clone::clone(&self.value),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for CaseStmt {
    #[inline]
    fn eq(&self, other: &CaseStmt) -> bool {
        self.span == other.span && self.value == other.value
    }
}PartialEq, #[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 CaseStmt {
            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,
                            "CaseStmt", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "value", &self.value)?;
                _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 CaseStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "value" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"value" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<CaseStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = CaseStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct CaseStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct CaseStmt with 2 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Expr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct CaseStmt with 2 elements")),
                            };
                        _serde::__private228::Ok(CaseStmt {
                                span: __field0,
                                value: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<Expr> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("value"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Expr>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("value")?,
                            };
                        _serde::__private228::Ok(CaseStmt {
                                span: __field0,
                                value: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "value"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "CaseStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<CaseStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
277pub struct CaseStmt {
278    /// Source span covering the label.
279    pub span:  Span,
280    /// Case condition expression.
281    pub value: Expr,
282}
283
284/// One `default` label.
285#[derive(#[automatically_derived]
impl ::core::fmt::Debug for DefaultStmt {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "DefaultStmt",
            "span", &&self.span)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for DefaultStmt {
    #[inline]
    fn clone(&self) -> DefaultStmt {
        DefaultStmt { span: ::core::clone::Clone::clone(&self.span) }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for DefaultStmt {
    #[inline]
    fn eq(&self, other: &DefaultStmt) -> bool { self.span == other.span }
}PartialEq, #[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 DefaultStmt {
            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,
                            "DefaultStmt", false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _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 DefaultStmt {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            _ => { _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<DefaultStmt>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = DefaultStmt;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct DefaultStmt")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct DefaultStmt with 1 element")),
                            };
                        _serde::__private228::Ok(DefaultStmt { span: __field0 })
                    }
                    #[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<Span> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&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("span")?,
                            };
                        _serde::__private228::Ok(DefaultStmt { span: __field0 })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "DefaultStmt", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<DefaultStmt>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
286pub struct DefaultStmt {
287    /// Source span covering the label.
288    pub span: Span,
289}
290
291/// One expression in `NWScript` source.
292#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Expr {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "Expr", "span",
            &self.span, "kind", &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Expr {
    #[inline]
    fn clone(&self) -> Expr {
        Expr {
            span: ::core::clone::Clone::clone(&self.span),
            kind: ::core::clone::Clone::clone(&self.kind),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Expr {
    #[inline]
    fn eq(&self, other: &Expr) -> bool {
        self.span == other.span && self.kind == other.kind
    }
}PartialEq, #[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 Expr {
            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, "Expr",
                            false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "span", &self.span)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _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 Expr {
            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, __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),
                            _ => _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 {
                            "span" => _serde::__private228::Ok(__Field::__field0),
                            "kind" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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"span" => _serde::__private228::Ok(__Field::__field0),
                            b"kind" => _serde::__private228::Ok(__Field::__field1),
                            _ => { _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<Expr>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Expr;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Expr")
                    }
                    #[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::<Span>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Expr with 2 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<ExprKind>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Expr with 2 elements")),
                            };
                        _serde::__private228::Ok(Expr {
                                span: __field0,
                                kind: __field1,
                            })
                    }
                    #[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<Span> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<ExprKind> =
                            _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("span"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Span>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("kind"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<ExprKind>(&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("span")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("kind")?,
                            };
                        _serde::__private228::Ok(Expr {
                                span: __field0,
                                kind: __field1,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] = &["span", "kind"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Expr", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Expr>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
293pub struct Expr {
294    /// Source span covering the whole expression.
295    pub span: Span,
296    /// Expression shape.
297    pub kind: ExprKind,
298}
299
300/// One expression shape.
301#[derive(#[automatically_derived]
impl ::core::fmt::Debug for ExprKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ExprKind::Literal(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Literal", &__self_0),
            ExprKind::Identifier(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Identifier", &__self_0),
            ExprKind::Call { callee: __self_0, arguments: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Call",
                    "callee", __self_0, "arguments", &__self_1),
            ExprKind::FieldAccess { base: __self_0, field: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "FieldAccess", "base", __self_0, "field", &__self_1),
            ExprKind::Unary { op: __self_0, expr: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Unary",
                    "op", __self_0, "expr", &__self_1),
            ExprKind::Binary { op: __self_0, left: __self_1, right: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "Binary", "op", __self_0, "left", __self_1, "right",
                    &__self_2),
            ExprKind::Conditional {
                condition: __self_0, when_true: __self_1, when_false: __self_2
                } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "Conditional", "condition", __self_0, "when_true", __self_1,
                    "when_false", &__self_2),
            ExprKind::Assignment {
                op: __self_0, left: __self_1, right: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "Assignment", "op", __self_0, "left", __self_1, "right",
                    &__self_2),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ExprKind {
    #[inline]
    fn clone(&self) -> ExprKind {
        match self {
            ExprKind::Literal(__self_0) =>
                ExprKind::Literal(::core::clone::Clone::clone(__self_0)),
            ExprKind::Identifier(__self_0) =>
                ExprKind::Identifier(::core::clone::Clone::clone(__self_0)),
            ExprKind::Call { callee: __self_0, arguments: __self_1 } =>
                ExprKind::Call {
                    callee: ::core::clone::Clone::clone(__self_0),
                    arguments: ::core::clone::Clone::clone(__self_1),
                },
            ExprKind::FieldAccess { base: __self_0, field: __self_1 } =>
                ExprKind::FieldAccess {
                    base: ::core::clone::Clone::clone(__self_0),
                    field: ::core::clone::Clone::clone(__self_1),
                },
            ExprKind::Unary { op: __self_0, expr: __self_1 } =>
                ExprKind::Unary {
                    op: ::core::clone::Clone::clone(__self_0),
                    expr: ::core::clone::Clone::clone(__self_1),
                },
            ExprKind::Binary { op: __self_0, left: __self_1, right: __self_2 }
                =>
                ExprKind::Binary {
                    op: ::core::clone::Clone::clone(__self_0),
                    left: ::core::clone::Clone::clone(__self_1),
                    right: ::core::clone::Clone::clone(__self_2),
                },
            ExprKind::Conditional {
                condition: __self_0, when_true: __self_1, when_false: __self_2
                } =>
                ExprKind::Conditional {
                    condition: ::core::clone::Clone::clone(__self_0),
                    when_true: ::core::clone::Clone::clone(__self_1),
                    when_false: ::core::clone::Clone::clone(__self_2),
                },
            ExprKind::Assignment {
                op: __self_0, left: __self_1, right: __self_2 } =>
                ExprKind::Assignment {
                    op: ::core::clone::Clone::clone(__self_0),
                    left: ::core::clone::Clone::clone(__self_1),
                    right: ::core::clone::Clone::clone(__self_2),
                },
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for ExprKind {
    #[inline]
    fn eq(&self, other: &ExprKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ExprKind::Literal(__self_0), ExprKind::Literal(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ExprKind::Identifier(__self_0),
                    ExprKind::Identifier(__arg1_0)) => __self_0 == __arg1_0,
                (ExprKind::Call { callee: __self_0, arguments: __self_1 },
                    ExprKind::Call { callee: __arg1_0, arguments: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (ExprKind::FieldAccess { base: __self_0, field: __self_1 },
                    ExprKind::FieldAccess { base: __arg1_0, field: __arg1_1 })
                    => __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (ExprKind::Unary { op: __self_0, expr: __self_1 },
                    ExprKind::Unary { op: __arg1_0, expr: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (ExprKind::Binary {
                    op: __self_0, left: __self_1, right: __self_2 },
                    ExprKind::Binary {
                    op: __arg1_0, left: __arg1_1, right: __arg1_2 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                (ExprKind::Conditional {
                    condition: __self_0,
                    when_true: __self_1,
                    when_false: __self_2 }, ExprKind::Conditional {
                    condition: __arg1_0,
                    when_true: __arg1_1,
                    when_false: __arg1_2 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                (ExprKind::Assignment {
                    op: __self_0, left: __self_1, right: __self_2 },
                    ExprKind::Assignment {
                    op: __arg1_0, left: __arg1_1, right: __arg1_2 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[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 ExprKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ExprKind::Literal(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ExprKind", 0u32, "Literal", __field0),
                    ExprKind::Identifier(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ExprKind", 1u32, "Identifier", __field0),
                    ExprKind::Call { ref callee, ref arguments } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 2u32, "Call", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "callee", callee)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "arguments", arguments)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ExprKind::FieldAccess { ref base, ref field } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 3u32, "FieldAccess", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "base", base)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "field", field)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ExprKind::Unary { ref op, ref expr } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 4u32, "Unary", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "op", op)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "expr", expr)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ExprKind::Binary { ref op, ref left, ref right } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 5u32, "Binary", 0 + 1 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "op", op)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "left", left)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "right", right)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ExprKind::Conditional {
                        ref condition, ref when_true, ref when_false } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 6u32, "Conditional", 0 + 1 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "condition", condition)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "when_true", when_true)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "when_false", when_false)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ExprKind::Assignment { ref op, ref left, ref right } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ExprKind", 7u32, "Assignment", 0 + 1 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "op", op)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "left", left)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "right", right)?;
                        _serde::ser::SerializeStructVariant::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 ExprKind {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 8")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Literal" => _serde::__private228::Ok(__Field::__field0),
                            "Identifier" => _serde::__private228::Ok(__Field::__field1),
                            "Call" => _serde::__private228::Ok(__Field::__field2),
                            "FieldAccess" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "Unary" => _serde::__private228::Ok(__Field::__field4),
                            "Binary" => _serde::__private228::Ok(__Field::__field5),
                            "Conditional" =>
                                _serde::__private228::Ok(__Field::__field6),
                            "Assignment" => _serde::__private228::Ok(__Field::__field7),
                            _ => {
                                _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"Literal" => _serde::__private228::Ok(__Field::__field0),
                            b"Identifier" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"Call" => _serde::__private228::Ok(__Field::__field2),
                            b"FieldAccess" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"Unary" => _serde::__private228::Ok(__Field::__field4),
                            b"Binary" => _serde::__private228::Ok(__Field::__field5),
                            b"Conditional" =>
                                _serde::__private228::Ok(__Field::__field6),
                            b"Assignment" =>
                                _serde::__private228::Ok(__Field::__field7),
                            _ => {
                                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<ExprKind>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = ExprKind;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum ExprKind")
                    }
                    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::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Literal>(__variant),
                                    ExprKind::Literal),
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
                                    ExprKind::Identifier),
                            (__Field::__field2, __variant) => {
                                #[allow(non_camel_case_types)]
                                #[doc(hidden)]
                                enum __Field { __field0, __field1, __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),
                                            _ => _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 {
                                            "callee" => _serde::__private228::Ok(__Field::__field0),
                                            "arguments" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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"callee" => _serde::__private228::Ok(__Field::__field0),
                                            b"arguments" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::Call")
                                    }
                                    #[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::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::Call with 2 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<Vec<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"struct variant ExprKind::Call with 2 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::Call {
                                                callee: __field0,
                                                arguments: __field1,
                                            })
                                    }
                                    #[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<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field1: _serde::__private228::Option<Vec<Expr>> =
                                            _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("callee"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("arguments"));
                                                    }
                                                    __field1 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<Expr>>(&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("callee")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("arguments")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::Call {
                                                callee: __field0,
                                                arguments: __field1,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] =
                                    &["callee", "arguments"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                            (__Field::__field3, __variant) => {
                                #[allow(non_camel_case_types)]
                                #[doc(hidden)]
                                enum __Field { __field0, __field1, __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),
                                            _ => _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 {
                                            "base" => _serde::__private228::Ok(__Field::__field0),
                                            "field" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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"base" => _serde::__private228::Ok(__Field::__field0),
                                            b"field" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::FieldAccess")
                                    }
                                    #[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::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::FieldAccess with 2 elements")),
                                            };
                                        let __field1 =
                                            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(1usize,
                                                                &"struct variant ExprKind::FieldAccess with 2 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::FieldAccess {
                                                base: __field0,
                                                field: __field1,
                                            })
                                    }
                                    #[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<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field1: _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("base"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("field"));
                                                    }
                                                    __field1 =
                                                        _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("base")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("field")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::FieldAccess {
                                                base: __field0,
                                                field: __field1,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] = &["base", "field"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                            (__Field::__field4, __variant) => {
                                #[allow(non_camel_case_types)]
                                #[doc(hidden)]
                                enum __Field { __field0, __field1, __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),
                                            _ => _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 {
                                            "op" => _serde::__private228::Ok(__Field::__field0),
                                            "expr" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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"op" => _serde::__private228::Ok(__Field::__field0),
                                            b"expr" => _serde::__private228::Ok(__Field::__field1),
                                            _ => { _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::Unary")
                                    }
                                    #[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::<UnaryOp>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::Unary with 2 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"struct variant ExprKind::Unary with 2 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::Unary {
                                                op: __field0,
                                                expr: __field1,
                                            })
                                    }
                                    #[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<UnaryOp> =
                                            _serde::__private228::None;
                                        let mut __field1: _serde::__private228::Option<Box<Expr>> =
                                            _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("op"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<UnaryOp>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("expr"));
                                                    }
                                                    __field1 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&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("op")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("expr")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::Unary {
                                                op: __field0,
                                                expr: __field1,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] = &["op", "expr"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                            (__Field::__field5, __variant) => {
                                #[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 {
                                            "op" => _serde::__private228::Ok(__Field::__field0),
                                            "left" => _serde::__private228::Ok(__Field::__field1),
                                            "right" => _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"op" => _serde::__private228::Ok(__Field::__field0),
                                            b"left" => _serde::__private228::Ok(__Field::__field1),
                                            b"right" => _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::Binary")
                                    }
                                    #[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::<BinaryOp>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::Binary with 3 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"struct variant ExprKind::Binary with 3 elements")),
                                            };
                                        let __field2 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                                &"struct variant ExprKind::Binary with 3 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::Binary {
                                                op: __field0,
                                                left: __field1,
                                                right: __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<BinaryOp> =
                                            _serde::__private228::None;
                                        let mut __field1: _serde::__private228::Option<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field2: _serde::__private228::Option<Box<Expr>> =
                                            _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("op"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<BinaryOp>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("left"));
                                                    }
                                                    __field1 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field2 => {
                                                    if _serde::__private228::Option::is_some(&__field2) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("right"));
                                                    }
                                                    __field2 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&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("op")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("left")?,
                                            };
                                        let __field2 =
                                            match __field2 {
                                                _serde::__private228::Some(__field2) => __field2,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("right")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::Binary {
                                                op: __field0,
                                                left: __field1,
                                                right: __field2,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] =
                                    &["op", "left", "right"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                            (__Field::__field6, __variant) => {
                                #[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 {
                                            "condition" => _serde::__private228::Ok(__Field::__field0),
                                            "when_true" => _serde::__private228::Ok(__Field::__field1),
                                            "when_false" => _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"condition" => _serde::__private228::Ok(__Field::__field0),
                                            b"when_true" => _serde::__private228::Ok(__Field::__field1),
                                            b"when_false" =>
                                                _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::Conditional")
                                    }
                                    #[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::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::Conditional with 3 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"struct variant ExprKind::Conditional with 3 elements")),
                                            };
                                        let __field2 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                                &"struct variant ExprKind::Conditional with 3 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::Conditional {
                                                condition: __field0,
                                                when_true: __field1,
                                                when_false: __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<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field1: _serde::__private228::Option<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field2: _serde::__private228::Option<Box<Expr>> =
                                            _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("condition"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("when_true"));
                                                    }
                                                    __field1 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field2 => {
                                                    if _serde::__private228::Option::is_some(&__field2) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("when_false"));
                                                    }
                                                    __field2 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&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("condition")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("when_true")?,
                                            };
                                        let __field2 =
                                            match __field2 {
                                                _serde::__private228::Some(__field2) => __field2,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("when_false")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::Conditional {
                                                condition: __field0,
                                                when_true: __field1,
                                                when_false: __field2,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] =
                                    &["condition", "when_true", "when_false"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                            (__Field::__field7, __variant) => {
                                #[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 {
                                            "op" => _serde::__private228::Ok(__Field::__field0),
                                            "left" => _serde::__private228::Ok(__Field::__field1),
                                            "right" => _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"op" => _serde::__private228::Ok(__Field::__field0),
                                            b"left" => _serde::__private228::Ok(__Field::__field1),
                                            b"right" => _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<ExprKind>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = ExprKind;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "struct variant ExprKind::Assignment")
                                    }
                                    #[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::<AssignmentOp>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"struct variant ExprKind::Assignment with 3 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"struct variant ExprKind::Assignment with 3 elements")),
                                            };
                                        let __field2 =
                                            match _serde::de::SeqAccess::next_element::<Box<Expr>>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                                &"struct variant ExprKind::Assignment with 3 elements")),
                                            };
                                        _serde::__private228::Ok(ExprKind::Assignment {
                                                op: __field0,
                                                left: __field1,
                                                right: __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<AssignmentOp> =
                                            _serde::__private228::None;
                                        let mut __field1: _serde::__private228::Option<Box<Expr>> =
                                            _serde::__private228::None;
                                        let mut __field2: _serde::__private228::Option<Box<Expr>> =
                                            _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("op"));
                                                    }
                                                    __field0 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<AssignmentOp>(&mut __map)?);
                                                }
                                                __Field::__field1 => {
                                                    if _serde::__private228::Option::is_some(&__field1) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("left"));
                                                    }
                                                    __field1 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&mut __map)?);
                                                }
                                                __Field::__field2 => {
                                                    if _serde::__private228::Option::is_some(&__field2) {
                                                        return _serde::__private228::Err(<__A::Error as
                                                                        _serde::de::Error>::duplicate_field("right"));
                                                    }
                                                    __field2 =
                                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<Expr>>(&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("op")?,
                                            };
                                        let __field1 =
                                            match __field1 {
                                                _serde::__private228::Some(__field1) => __field1,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("left")?,
                                            };
                                        let __field2 =
                                            match __field2 {
                                                _serde::__private228::Some(__field2) => __field2,
                                                _serde::__private228::None =>
                                                    _serde::__private228::de::missing_field("right")?,
                                            };
                                        _serde::__private228::Ok(ExprKind::Assignment {
                                                op: __field0,
                                                left: __field1,
                                                right: __field2,
                                            })
                                    }
                                }
                                #[doc(hidden)]
                                const FIELDS: &'static [&'static str] =
                                    &["op", "left", "right"];
                                _serde::de::VariantAccess::struct_variant(__variant, FIELDS,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<ExprKind>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Literal", "Identifier", "Call", "FieldAccess", "Unary",
                                "Binary", "Conditional", "Assignment"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "ExprKind", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<ExprKind>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
302pub enum ExprKind {
303    /// One literal constant.
304    Literal(Literal),
305    /// One variable or named constant reference.
306    Identifier(String),
307    /// One function call or action invocation.
308    Call {
309        /// Called expression.
310        callee:    Box<Expr>,
311        /// Call arguments in source order.
312        arguments: Vec<Expr>,
313    },
314    /// One structure field access.
315    FieldAccess {
316        /// Expression on the left-hand side of `.`.
317        base:  Box<Expr>,
318        /// Field name on the right-hand side of `.`.
319        field: String,
320    },
321    /// One unary or postfix operator.
322    Unary {
323        /// Applied operator.
324        op:   UnaryOp,
325        /// Operand expression.
326        expr: Box<Expr>,
327    },
328    /// One binary operator.
329    Binary {
330        /// Applied operator.
331        op:    BinaryOp,
332        /// Left-hand operand.
333        left:  Box<Expr>,
334        /// Right-hand operand.
335        right: Box<Expr>,
336    },
337    /// One conditional expression.
338    Conditional {
339        /// Condition before `?`.
340        condition:  Box<Expr>,
341        /// Expression between `?` and `:`.
342        when_true:  Box<Expr>,
343        /// Expression after `:`.
344        when_false: Box<Expr>,
345    },
346    /// One assignment expression.
347    Assignment {
348        /// Applied assignment operator.
349        op:    AssignmentOp,
350        /// Assigned lvalue expression.
351        left:  Box<Expr>,
352        /// Right-hand expression.
353        right: Box<Expr>,
354    },
355}
356
357/// One unary operator.
358#[derive(#[automatically_derived]
impl ::core::fmt::Debug for UnaryOp {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                UnaryOp::Negate => "Negate",
                UnaryOp::OnesComplement => "OnesComplement",
                UnaryOp::BooleanNot => "BooleanNot",
                UnaryOp::PreIncrement => "PreIncrement",
                UnaryOp::PreDecrement => "PreDecrement",
                UnaryOp::PostIncrement => "PostIncrement",
                UnaryOp::PostDecrement => "PostDecrement",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for UnaryOp {
    #[inline]
    fn clone(&self) -> UnaryOp { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for UnaryOp { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for UnaryOp {
    #[inline]
    fn eq(&self, other: &UnaryOp) -> 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 UnaryOp {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[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 UnaryOp {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    UnaryOp::Negate =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 0u32, "Negate"),
                    UnaryOp::OnesComplement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 1u32, "OnesComplement"),
                    UnaryOp::BooleanNot =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 2u32, "BooleanNot"),
                    UnaryOp::PreIncrement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 3u32, "PreIncrement"),
                    UnaryOp::PreDecrement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 4u32, "PreDecrement"),
                    UnaryOp::PostIncrement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 5u32, "PostIncrement"),
                    UnaryOp::PostDecrement =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UnaryOp", 6u32, "PostDecrement"),
                }
            }
        }
    };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 UnaryOp {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 7")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Negate" => _serde::__private228::Ok(__Field::__field0),
                            "OnesComplement" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "BooleanNot" => _serde::__private228::Ok(__Field::__field2),
                            "PreIncrement" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "PreDecrement" =>
                                _serde::__private228::Ok(__Field::__field4),
                            "PostIncrement" =>
                                _serde::__private228::Ok(__Field::__field5),
                            "PostDecrement" =>
                                _serde::__private228::Ok(__Field::__field6),
                            _ => {
                                _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"Negate" => _serde::__private228::Ok(__Field::__field0),
                            b"OnesComplement" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"BooleanNot" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"PreIncrement" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"PreDecrement" =>
                                _serde::__private228::Ok(__Field::__field4),
                            b"PostIncrement" =>
                                _serde::__private228::Ok(__Field::__field5),
                            b"PostDecrement" =>
                                _serde::__private228::Ok(__Field::__field6),
                            _ => {
                                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<UnaryOp>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = UnaryOp;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum UnaryOp")
                    }
                    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(UnaryOp::Negate)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::OnesComplement)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::BooleanNot)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::PreIncrement)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::PreDecrement)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::PostIncrement)
                            }
                            (__Field::__field6, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(UnaryOp::PostDecrement)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Negate", "OnesComplement", "BooleanNot", "PreIncrement",
                                "PreDecrement", "PostIncrement", "PostDecrement"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "UnaryOp", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<UnaryOp>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
359pub enum UnaryOp {
360    /// Prefix `-`
361    Negate,
362    /// Prefix `~`
363    OnesComplement,
364    /// Prefix `!`
365    BooleanNot,
366    /// Prefix `++`
367    PreIncrement,
368    /// Prefix `--`
369    PreDecrement,
370    /// Postfix `++`
371    PostIncrement,
372    /// Postfix `--`
373    PostDecrement,
374}
375
376/// One binary operator.
377#[derive(#[automatically_derived]
impl ::core::fmt::Debug for BinaryOp {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                BinaryOp::Multiply => "Multiply",
                BinaryOp::Divide => "Divide",
                BinaryOp::Modulus => "Modulus",
                BinaryOp::Add => "Add",
                BinaryOp::Subtract => "Subtract",
                BinaryOp::ShiftLeft => "ShiftLeft",
                BinaryOp::ShiftRight => "ShiftRight",
                BinaryOp::UnsignedShiftRight => "UnsignedShiftRight",
                BinaryOp::GreaterEqual => "GreaterEqual",
                BinaryOp::GreaterThan => "GreaterThan",
                BinaryOp::LessThan => "LessThan",
                BinaryOp::LessEqual => "LessEqual",
                BinaryOp::NotEqual => "NotEqual",
                BinaryOp::EqualEqual => "EqualEqual",
                BinaryOp::BooleanAnd => "BooleanAnd",
                BinaryOp::ExclusiveOr => "ExclusiveOr",
                BinaryOp::InclusiveOr => "InclusiveOr",
                BinaryOp::LogicalAnd => "LogicalAnd",
                BinaryOp::LogicalOr => "LogicalOr",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for BinaryOp {
    #[inline]
    fn clone(&self) -> BinaryOp { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for BinaryOp { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for BinaryOp {
    #[inline]
    fn eq(&self, other: &BinaryOp) -> 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 BinaryOp {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[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 BinaryOp {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    BinaryOp::Multiply =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 0u32, "Multiply"),
                    BinaryOp::Divide =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 1u32, "Divide"),
                    BinaryOp::Modulus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 2u32, "Modulus"),
                    BinaryOp::Add =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 3u32, "Add"),
                    BinaryOp::Subtract =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 4u32, "Subtract"),
                    BinaryOp::ShiftLeft =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 5u32, "ShiftLeft"),
                    BinaryOp::ShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 6u32, "ShiftRight"),
                    BinaryOp::UnsignedShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 7u32, "UnsignedShiftRight"),
                    BinaryOp::GreaterEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 8u32, "GreaterEqual"),
                    BinaryOp::GreaterThan =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 9u32, "GreaterThan"),
                    BinaryOp::LessThan =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 10u32, "LessThan"),
                    BinaryOp::LessEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 11u32, "LessEqual"),
                    BinaryOp::NotEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 12u32, "NotEqual"),
                    BinaryOp::EqualEqual =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 13u32, "EqualEqual"),
                    BinaryOp::BooleanAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 14u32, "BooleanAnd"),
                    BinaryOp::ExclusiveOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 15u32, "ExclusiveOr"),
                    BinaryOp::InclusiveOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 16u32, "InclusiveOr"),
                    BinaryOp::LogicalAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 17u32, "LogicalAnd"),
                    BinaryOp::LogicalOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BinaryOp", 18u32, "LogicalOr"),
                }
            }
        }
    };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 BinaryOp {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 19")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Multiply" => _serde::__private228::Ok(__Field::__field0),
                            "Divide" => _serde::__private228::Ok(__Field::__field1),
                            "Modulus" => _serde::__private228::Ok(__Field::__field2),
                            "Add" => _serde::__private228::Ok(__Field::__field3),
                            "Subtract" => _serde::__private228::Ok(__Field::__field4),
                            "ShiftLeft" => _serde::__private228::Ok(__Field::__field5),
                            "ShiftRight" => _serde::__private228::Ok(__Field::__field6),
                            "UnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field7),
                            "GreaterEqual" =>
                                _serde::__private228::Ok(__Field::__field8),
                            "GreaterThan" =>
                                _serde::__private228::Ok(__Field::__field9),
                            "LessThan" => _serde::__private228::Ok(__Field::__field10),
                            "LessEqual" => _serde::__private228::Ok(__Field::__field11),
                            "NotEqual" => _serde::__private228::Ok(__Field::__field12),
                            "EqualEqual" =>
                                _serde::__private228::Ok(__Field::__field13),
                            "BooleanAnd" =>
                                _serde::__private228::Ok(__Field::__field14),
                            "ExclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field15),
                            "InclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field16),
                            "LogicalAnd" =>
                                _serde::__private228::Ok(__Field::__field17),
                            "LogicalOr" => _serde::__private228::Ok(__Field::__field18),
                            _ => {
                                _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"Multiply" => _serde::__private228::Ok(__Field::__field0),
                            b"Divide" => _serde::__private228::Ok(__Field::__field1),
                            b"Modulus" => _serde::__private228::Ok(__Field::__field2),
                            b"Add" => _serde::__private228::Ok(__Field::__field3),
                            b"Subtract" => _serde::__private228::Ok(__Field::__field4),
                            b"ShiftLeft" => _serde::__private228::Ok(__Field::__field5),
                            b"ShiftRight" =>
                                _serde::__private228::Ok(__Field::__field6),
                            b"UnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field7),
                            b"GreaterEqual" =>
                                _serde::__private228::Ok(__Field::__field8),
                            b"GreaterThan" =>
                                _serde::__private228::Ok(__Field::__field9),
                            b"LessThan" => _serde::__private228::Ok(__Field::__field10),
                            b"LessEqual" =>
                                _serde::__private228::Ok(__Field::__field11),
                            b"NotEqual" => _serde::__private228::Ok(__Field::__field12),
                            b"EqualEqual" =>
                                _serde::__private228::Ok(__Field::__field13),
                            b"BooleanAnd" =>
                                _serde::__private228::Ok(__Field::__field14),
                            b"ExclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field15),
                            b"InclusiveOr" =>
                                _serde::__private228::Ok(__Field::__field16),
                            b"LogicalAnd" =>
                                _serde::__private228::Ok(__Field::__field17),
                            b"LogicalOr" =>
                                _serde::__private228::Ok(__Field::__field18),
                            _ => {
                                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<BinaryOp>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = BinaryOp;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum BinaryOp")
                    }
                    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(BinaryOp::Multiply)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::Divide)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::Modulus)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::Add)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::Subtract)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::ShiftLeft)
                            }
                            (__Field::__field6, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::ShiftRight)
                            }
                            (__Field::__field7, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::UnsignedShiftRight)
                            }
                            (__Field::__field8, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::GreaterEqual)
                            }
                            (__Field::__field9, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::GreaterThan)
                            }
                            (__Field::__field10, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::LessThan)
                            }
                            (__Field::__field11, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::LessEqual)
                            }
                            (__Field::__field12, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::NotEqual)
                            }
                            (__Field::__field13, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::EqualEqual)
                            }
                            (__Field::__field14, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::BooleanAnd)
                            }
                            (__Field::__field15, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::ExclusiveOr)
                            }
                            (__Field::__field16, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::InclusiveOr)
                            }
                            (__Field::__field17, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::LogicalAnd)
                            }
                            (__Field::__field18, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(BinaryOp::LogicalOr)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Multiply", "Divide", "Modulus", "Add", "Subtract",
                                "ShiftLeft", "ShiftRight", "UnsignedShiftRight",
                                "GreaterEqual", "GreaterThan", "LessThan", "LessEqual",
                                "NotEqual", "EqualEqual", "BooleanAnd", "ExclusiveOr",
                                "InclusiveOr", "LogicalAnd", "LogicalOr"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "BinaryOp", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<BinaryOp>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
378pub enum BinaryOp {
379    /// `*`
380    Multiply,
381    /// `/`
382    Divide,
383    /// `%`
384    Modulus,
385    /// `+`
386    Add,
387    /// `-`
388    Subtract,
389    /// `<<`
390    ShiftLeft,
391    /// `>>`
392    ShiftRight,
393    /// `>>>`
394    UnsignedShiftRight,
395    /// `>=`
396    GreaterEqual,
397    /// `>`
398    GreaterThan,
399    /// `<`
400    LessThan,
401    /// `<=`
402    LessEqual,
403    /// `!=`
404    NotEqual,
405    /// `==`
406    EqualEqual,
407    /// `&`
408    BooleanAnd,
409    /// `^`
410    ExclusiveOr,
411    /// `|`
412    InclusiveOr,
413    /// `&&`
414    LogicalAnd,
415    /// `||`
416    LogicalOr,
417}
418
419/// One assignment operator.
420#[derive(#[automatically_derived]
impl ::core::fmt::Debug for AssignmentOp {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                AssignmentOp::Assign => "Assign",
                AssignmentOp::AssignMinus => "AssignMinus",
                AssignmentOp::AssignPlus => "AssignPlus",
                AssignmentOp::AssignMultiply => "AssignMultiply",
                AssignmentOp::AssignDivide => "AssignDivide",
                AssignmentOp::AssignModulus => "AssignModulus",
                AssignmentOp::AssignAnd => "AssignAnd",
                AssignmentOp::AssignXor => "AssignXor",
                AssignmentOp::AssignOr => "AssignOr",
                AssignmentOp::AssignShiftLeft => "AssignShiftLeft",
                AssignmentOp::AssignShiftRight => "AssignShiftRight",
                AssignmentOp::AssignUnsignedShiftRight =>
                    "AssignUnsignedShiftRight",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for AssignmentOp {
    #[inline]
    fn clone(&self) -> AssignmentOp { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for AssignmentOp { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for AssignmentOp {
    #[inline]
    fn eq(&self, other: &AssignmentOp) -> 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 AssignmentOp {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[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 AssignmentOp {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AssignmentOp::Assign =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 0u32, "Assign"),
                    AssignmentOp::AssignMinus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 1u32, "AssignMinus"),
                    AssignmentOp::AssignPlus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 2u32, "AssignPlus"),
                    AssignmentOp::AssignMultiply =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 3u32, "AssignMultiply"),
                    AssignmentOp::AssignDivide =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 4u32, "AssignDivide"),
                    AssignmentOp::AssignModulus =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 5u32, "AssignModulus"),
                    AssignmentOp::AssignAnd =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 6u32, "AssignAnd"),
                    AssignmentOp::AssignXor =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 7u32, "AssignXor"),
                    AssignmentOp::AssignOr =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 8u32, "AssignOr"),
                    AssignmentOp::AssignShiftLeft =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 9u32, "AssignShiftLeft"),
                    AssignmentOp::AssignShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 10u32, "AssignShiftRight"),
                    AssignmentOp::AssignUnsignedShiftRight =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssignmentOp", 11u32, "AssignUnsignedShiftRight"),
                }
            }
        }
    };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 AssignmentOp {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 12")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Assign" => _serde::__private228::Ok(__Field::__field0),
                            "AssignMinus" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "AssignPlus" => _serde::__private228::Ok(__Field::__field2),
                            "AssignMultiply" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "AssignDivide" =>
                                _serde::__private228::Ok(__Field::__field4),
                            "AssignModulus" =>
                                _serde::__private228::Ok(__Field::__field5),
                            "AssignAnd" => _serde::__private228::Ok(__Field::__field6),
                            "AssignXor" => _serde::__private228::Ok(__Field::__field7),
                            "AssignOr" => _serde::__private228::Ok(__Field::__field8),
                            "AssignShiftLeft" =>
                                _serde::__private228::Ok(__Field::__field9),
                            "AssignShiftRight" =>
                                _serde::__private228::Ok(__Field::__field10),
                            "AssignUnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field11),
                            _ => {
                                _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"Assign" => _serde::__private228::Ok(__Field::__field0),
                            b"AssignMinus" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"AssignPlus" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"AssignMultiply" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"AssignDivide" =>
                                _serde::__private228::Ok(__Field::__field4),
                            b"AssignModulus" =>
                                _serde::__private228::Ok(__Field::__field5),
                            b"AssignAnd" => _serde::__private228::Ok(__Field::__field6),
                            b"AssignXor" => _serde::__private228::Ok(__Field::__field7),
                            b"AssignOr" => _serde::__private228::Ok(__Field::__field8),
                            b"AssignShiftLeft" =>
                                _serde::__private228::Ok(__Field::__field9),
                            b"AssignShiftRight" =>
                                _serde::__private228::Ok(__Field::__field10),
                            b"AssignUnsignedShiftRight" =>
                                _serde::__private228::Ok(__Field::__field11),
                            _ => {
                                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<AssignmentOp>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = AssignmentOp;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum AssignmentOp")
                    }
                    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(AssignmentOp::Assign)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignMinus)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignPlus)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignMultiply)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignDivide)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignModulus)
                            }
                            (__Field::__field6, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignAnd)
                            }
                            (__Field::__field7, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignXor)
                            }
                            (__Field::__field8, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignOr)
                            }
                            (__Field::__field9, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignShiftLeft)
                            }
                            (__Field::__field10, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignShiftRight)
                            }
                            (__Field::__field11, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(AssignmentOp::AssignUnsignedShiftRight)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Assign", "AssignMinus", "AssignPlus", "AssignMultiply",
                                "AssignDivide", "AssignModulus", "AssignAnd", "AssignXor",
                                "AssignOr", "AssignShiftLeft", "AssignShiftRight",
                                "AssignUnsignedShiftRight"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "AssignmentOp", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<AssignmentOp>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
421pub enum AssignmentOp {
422    /// `=`
423    Assign,
424    /// `-=`
425    AssignMinus,
426    /// `+=`
427    AssignPlus,
428    /// `*=`
429    AssignMultiply,
430    /// `/=`
431    AssignDivide,
432    /// `%=`
433    AssignModulus,
434    /// `&=`
435    AssignAnd,
436    /// `^=`
437    AssignXor,
438    /// `|=`
439    AssignOr,
440    /// `<<=`
441    AssignShiftLeft,
442    /// `>>=`
443    AssignShiftRight,
444    /// `>>>=`
445    AssignUnsignedShiftRight,
446}
447
448/// One literal expression.
449#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Literal {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            Literal::Integer(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Integer", &__self_0),
            Literal::Float(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Float",
                    &__self_0),
            Literal::String(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "String",
                    &__self_0),
            Literal::ObjectSelf =>
                ::core::fmt::Formatter::write_str(f, "ObjectSelf"),
            Literal::ObjectInvalid =>
                ::core::fmt::Formatter::write_str(f, "ObjectInvalid"),
            Literal::LocationInvalid =>
                ::core::fmt::Formatter::write_str(f, "LocationInvalid"),
            Literal::Json(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Json",
                    &__self_0),
            Literal::Vector(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Vector",
                    &__self_0),
            Literal::Magic(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Magic",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Literal {
    #[inline]
    fn clone(&self) -> Literal {
        match self {
            Literal::Integer(__self_0) =>
                Literal::Integer(::core::clone::Clone::clone(__self_0)),
            Literal::Float(__self_0) =>
                Literal::Float(::core::clone::Clone::clone(__self_0)),
            Literal::String(__self_0) =>
                Literal::String(::core::clone::Clone::clone(__self_0)),
            Literal::ObjectSelf => Literal::ObjectSelf,
            Literal::ObjectInvalid => Literal::ObjectInvalid,
            Literal::LocationInvalid => Literal::LocationInvalid,
            Literal::Json(__self_0) =>
                Literal::Json(::core::clone::Clone::clone(__self_0)),
            Literal::Vector(__self_0) =>
                Literal::Vector(::core::clone::Clone::clone(__self_0)),
            Literal::Magic(__self_0) =>
                Literal::Magic(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Literal {
    #[inline]
    fn eq(&self, other: &Literal) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (Literal::Integer(__self_0), Literal::Integer(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Literal::Float(__self_0), Literal::Float(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Literal::String(__self_0), Literal::String(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Literal::Json(__self_0), Literal::Json(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Literal::Vector(__self_0), Literal::Vector(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (Literal::Magic(__self_0), Literal::Magic(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[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 Literal {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Literal::Integer(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 0u32, "Integer", __field0),
                    Literal::Float(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 1u32, "Float", __field0),
                    Literal::String(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 2u32, "String", __field0),
                    Literal::ObjectSelf =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Literal", 3u32, "ObjectSelf"),
                    Literal::ObjectInvalid =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Literal", 4u32, "ObjectInvalid"),
                    Literal::LocationInvalid =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Literal", 5u32, "LocationInvalid"),
                    Literal::Json(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 6u32, "Json", __field0),
                    Literal::Vector(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 7u32, "Vector", __field0),
                    Literal::Magic(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Literal", 8u32, "Magic", __field0),
                }
            }
        }
    };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 Literal {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 9")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Integer" => _serde::__private228::Ok(__Field::__field0),
                            "Float" => _serde::__private228::Ok(__Field::__field1),
                            "String" => _serde::__private228::Ok(__Field::__field2),
                            "ObjectSelf" => _serde::__private228::Ok(__Field::__field3),
                            "ObjectInvalid" =>
                                _serde::__private228::Ok(__Field::__field4),
                            "LocationInvalid" =>
                                _serde::__private228::Ok(__Field::__field5),
                            "Json" => _serde::__private228::Ok(__Field::__field6),
                            "Vector" => _serde::__private228::Ok(__Field::__field7),
                            "Magic" => _serde::__private228::Ok(__Field::__field8),
                            _ => {
                                _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"Integer" => _serde::__private228::Ok(__Field::__field0),
                            b"Float" => _serde::__private228::Ok(__Field::__field1),
                            b"String" => _serde::__private228::Ok(__Field::__field2),
                            b"ObjectSelf" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"ObjectInvalid" =>
                                _serde::__private228::Ok(__Field::__field4),
                            b"LocationInvalid" =>
                                _serde::__private228::Ok(__Field::__field5),
                            b"Json" => _serde::__private228::Ok(__Field::__field6),
                            b"Vector" => _serde::__private228::Ok(__Field::__field7),
                            b"Magic" => _serde::__private228::Ok(__Field::__field8),
                            _ => {
                                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<Literal>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Literal;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum Literal")
                    }
                    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::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<i32>(__variant),
                                    Literal::Integer),
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<f32>(__variant),
                                    Literal::Float),
                            (__Field::__field2, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
                                    Literal::String),
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Literal::ObjectSelf)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Literal::ObjectInvalid)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(Literal::LocationInvalid)
                            }
                            (__Field::__field6, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
                                    Literal::Json),
                            (__Field::__field7, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<[f32; 3]>(__variant),
                                    Literal::Vector),
                            (__Field::__field8, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<MagicLiteral>(__variant),
                                    Literal::Magic),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Integer", "Float", "String", "ObjectSelf",
                                "ObjectInvalid", "LocationInvalid", "Json", "Vector",
                                "Magic"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "Literal", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Literal>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
450pub enum Literal {
451    /// One integer literal.
452    Integer(i32),
453    /// One floating-point literal.
454    Float(f32),
455    /// One string literal.
456    String(String),
457    /// `OBJECT_SELF`
458    ObjectSelf,
459    /// `OBJECT_INVALID`
460    ObjectInvalid,
461    /// `LOCATION_INVALID`
462    LocationInvalid,
463    /// One JSON constructor keyword lowered to its textual payload.
464    Json(String),
465    /// One vector constant.
466    Vector([f32; 3]),
467    /// One magic macro token.
468    Magic(MagicLiteral),
469}
470
471/// One magic macro literal preserved in syntax.
472#[derive(#[automatically_derived]
impl ::core::fmt::Debug for MagicLiteral {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                MagicLiteral::Function => "Function",
                MagicLiteral::File => "File",
                MagicLiteral::Line => "Line",
                MagicLiteral::Date => "Date",
                MagicLiteral::Time => "Time",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for MagicLiteral {
    #[inline]
    fn clone(&self) -> MagicLiteral { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MagicLiteral { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for MagicLiteral {
    #[inline]
    fn eq(&self, other: &MagicLiteral) -> 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 MagicLiteral {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[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 MagicLiteral {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    MagicLiteral::Function =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MagicLiteral", 0u32, "Function"),
                    MagicLiteral::File =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MagicLiteral", 1u32, "File"),
                    MagicLiteral::Line =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MagicLiteral", 2u32, "Line"),
                    MagicLiteral::Date =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MagicLiteral", 3u32, "Date"),
                    MagicLiteral::Time =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MagicLiteral", 4u32, "Time"),
                }
            }
        }
    };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 MagicLiteral {
            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,
                }
                #[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),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 5")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Function" => _serde::__private228::Ok(__Field::__field0),
                            "File" => _serde::__private228::Ok(__Field::__field1),
                            "Line" => _serde::__private228::Ok(__Field::__field2),
                            "Date" => _serde::__private228::Ok(__Field::__field3),
                            "Time" => _serde::__private228::Ok(__Field::__field4),
                            _ => {
                                _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"Function" => _serde::__private228::Ok(__Field::__field0),
                            b"File" => _serde::__private228::Ok(__Field::__field1),
                            b"Line" => _serde::__private228::Ok(__Field::__field2),
                            b"Date" => _serde::__private228::Ok(__Field::__field3),
                            b"Time" => _serde::__private228::Ok(__Field::__field4),
                            _ => {
                                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<MagicLiteral>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = MagicLiteral;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum MagicLiteral")
                    }
                    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(MagicLiteral::Function)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MagicLiteral::File)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MagicLiteral::Line)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MagicLiteral::Date)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MagicLiteral::Time)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Function", "File", "Line", "Date", "Time"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "MagicLiteral", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<MagicLiteral>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
473pub enum MagicLiteral {
474    /// `__FUNCTION__`
475    Function,
476    /// `__FILE__`
477    File,
478    /// `__LINE__`
479    Line,
480    /// `__DATE__`
481    Date,
482    /// `__TIME__`
483    Time,
484}