// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.

#[cfg(any(feature = "derive", feature = "full"))]
use crate::tt::TokenStreamHelper;
use crate::*;
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Abi {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Abi {
    fn eq(&self, other: &Self) -> bool {
        self.name == other.name
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for AngleBracketedGenericArguments {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for AngleBracketedGenericArguments {
    fn eq(&self, other: &Self) -> bool {
        self.colon2_token == other.colon2_token && self.args == other.args
    }
}
#[cfg(feature = "full")]
impl Eq for Arm {}
#[cfg(feature = "full")]
impl PartialEq for Arm {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.pat == other.pat
            && self.guard == other.guard
            && self.body == other.body
            && self.comma == other.comma
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for AttrStyle {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for AttrStyle {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (AttrStyle::Outer, AttrStyle::Outer) => true,
            (AttrStyle::Inner(_), AttrStyle::Inner(_)) => true,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Attribute {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Attribute {
    fn eq(&self, other: &Self) -> bool {
        self.style == other.style
            && self.path == other.path
            && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for BareFnArg {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for BareFnArg {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.name == other.name && self.ty == other.ty
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for BinOp {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for BinOp {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (BinOp::Add(_), BinOp::Add(_)) => true,
            (BinOp::Sub(_), BinOp::Sub(_)) => true,
            (BinOp::Mul(_), BinOp::Mul(_)) => true,
            (BinOp::Div(_), BinOp::Div(_)) => true,
            (BinOp::Rem(_), BinOp::Rem(_)) => true,
            (BinOp::And(_), BinOp::And(_)) => true,
            (BinOp::Or(_), BinOp::Or(_)) => true,
            (BinOp::BitXor(_), BinOp::BitXor(_)) => true,
            (BinOp::BitAnd(_), BinOp::BitAnd(_)) => true,
            (BinOp::BitOr(_), BinOp::BitOr(_)) => true,
            (BinOp::Shl(_), BinOp::Shl(_)) => true,
            (BinOp::Shr(_), BinOp::Shr(_)) => true,
            (BinOp::Eq(_), BinOp::Eq(_)) => true,
            (BinOp::Lt(_), BinOp::Lt(_)) => true,
            (BinOp::Le(_), BinOp::Le(_)) => true,
            (BinOp::Ne(_), BinOp::Ne(_)) => true,
            (BinOp::Ge(_), BinOp::Ge(_)) => true,
            (BinOp::Gt(_), BinOp::Gt(_)) => true,
            (BinOp::AddEq(_), BinOp::AddEq(_)) => true,
            (BinOp::SubEq(_), BinOp::SubEq(_)) => true,
            (BinOp::MulEq(_), BinOp::MulEq(_)) => true,
            (BinOp::DivEq(_), BinOp::DivEq(_)) => true,
            (BinOp::RemEq(_), BinOp::RemEq(_)) => true,
            (BinOp::BitXorEq(_), BinOp::BitXorEq(_)) => true,
            (BinOp::BitAndEq(_), BinOp::BitAndEq(_)) => true,
            (BinOp::BitOrEq(_), BinOp::BitOrEq(_)) => true,
            (BinOp::ShlEq(_), BinOp::ShlEq(_)) => true,
            (BinOp::ShrEq(_), BinOp::ShrEq(_)) => true,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Binding {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Binding {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for Block {}
#[cfg(feature = "full")]
impl PartialEq for Block {
    fn eq(&self, other: &Self) -> bool {
        self.stmts == other.stmts
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for BoundLifetimes {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for BoundLifetimes {
    fn eq(&self, other: &Self) -> bool {
        self.lifetimes == other.lifetimes
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ConstParam {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ConstParam {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.ty == other.ty
            && self.eq_token == other.eq_token
            && self.default == other.default
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Constraint {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Constraint {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident && self.bounds == other.bounds
    }
}
#[cfg(feature = "derive")]
impl Eq for Data {}
#[cfg(feature = "derive")]
impl PartialEq for Data {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Data::Struct(self0), Data::Struct(other0)) => self0 == other0,
            (Data::Enum(self0), Data::Enum(other0)) => self0 == other0,
            (Data::Union(self0), Data::Union(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(feature = "derive")]
impl Eq for DataEnum {}
#[cfg(feature = "derive")]
impl PartialEq for DataEnum {
    fn eq(&self, other: &Self) -> bool {
        self.variants == other.variants
    }
}
#[cfg(feature = "derive")]
impl Eq for DataStruct {}
#[cfg(feature = "derive")]
impl PartialEq for DataStruct {
    fn eq(&self, other: &Self) -> bool {
        self.fields == other.fields && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "derive")]
impl Eq for DataUnion {}
#[cfg(feature = "derive")]
impl PartialEq for DataUnion {
    fn eq(&self, other: &Self) -> bool {
        self.fields == other.fields
    }
}
#[cfg(feature = "derive")]
impl Eq for DeriveInput {}
#[cfg(feature = "derive")]
impl PartialEq for DeriveInput {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.data == other.data
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Expr {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Expr {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            #[cfg(feature = "full")]
            (Expr::Array(self0), Expr::Array(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Assign(self0), Expr::Assign(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::AssignOp(self0), Expr::AssignOp(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Async(self0), Expr::Async(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Await(self0), Expr::Await(other0)) => self0 == other0,
            (Expr::Binary(self0), Expr::Binary(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Block(self0), Expr::Block(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Box(self0), Expr::Box(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Break(self0), Expr::Break(other0)) => self0 == other0,
            (Expr::Call(self0), Expr::Call(other0)) => self0 == other0,
            (Expr::Cast(self0), Expr::Cast(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Closure(self0), Expr::Closure(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Continue(self0), Expr::Continue(other0)) => self0 == other0,
            (Expr::Field(self0), Expr::Field(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::ForLoop(self0), Expr::ForLoop(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Group(self0), Expr::Group(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::If(self0), Expr::If(other0)) => self0 == other0,
            (Expr::Index(self0), Expr::Index(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Let(self0), Expr::Let(other0)) => self0 == other0,
            (Expr::Lit(self0), Expr::Lit(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Loop(self0), Expr::Loop(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Macro(self0), Expr::Macro(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Match(self0), Expr::Match(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::MethodCall(self0), Expr::MethodCall(other0)) => self0 == other0,
            (Expr::Paren(self0), Expr::Paren(other0)) => self0 == other0,
            (Expr::Path(self0), Expr::Path(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Range(self0), Expr::Range(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Reference(self0), Expr::Reference(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Repeat(self0), Expr::Repeat(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Return(self0), Expr::Return(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Struct(self0), Expr::Struct(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Try(self0), Expr::Try(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::TryBlock(self0), Expr::TryBlock(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Tuple(self0), Expr::Tuple(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Type(self0), Expr::Type(other0)) => self0 == other0,
            (Expr::Unary(self0), Expr::Unary(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Unsafe(self0), Expr::Unsafe(other0)) => self0 == other0,
            (Expr::Verbatim(self0), Expr::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            #[cfg(feature = "full")]
            (Expr::While(self0), Expr::While(other0)) => self0 == other0,
            #[cfg(feature = "full")]
            (Expr::Yield(self0), Expr::Yield(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for ExprArray {}
#[cfg(feature = "full")]
impl PartialEq for ExprArray {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.elems == other.elems
    }
}
#[cfg(feature = "full")]
impl Eq for ExprAssign {}
#[cfg(feature = "full")]
impl PartialEq for ExprAssign {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.left == other.left && self.right == other.right
    }
}
#[cfg(feature = "full")]
impl Eq for ExprAssignOp {}
#[cfg(feature = "full")]
impl PartialEq for ExprAssignOp {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.left == other.left
            && self.op == other.op
            && self.right == other.right
    }
}
#[cfg(feature = "full")]
impl Eq for ExprAsync {}
#[cfg(feature = "full")]
impl PartialEq for ExprAsync {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.capture == other.capture && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ExprAwait {}
#[cfg(feature = "full")]
impl PartialEq for ExprAwait {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.base == other.base
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprBinary {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprBinary {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.left == other.left
            && self.op == other.op
            && self.right == other.right
    }
}
#[cfg(feature = "full")]
impl Eq for ExprBlock {}
#[cfg(feature = "full")]
impl PartialEq for ExprBlock {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.label == other.label && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ExprBox {}
#[cfg(feature = "full")]
impl PartialEq for ExprBox {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprBreak {}
#[cfg(feature = "full")]
impl PartialEq for ExprBreak {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.label == other.label && self.expr == other.expr
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprCall {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprCall {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.func == other.func && self.args == other.args
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprCast {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprCast {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for ExprClosure {}
#[cfg(feature = "full")]
impl PartialEq for ExprClosure {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.asyncness == other.asyncness
            && self.movability == other.movability
            && self.capture == other.capture
            && self.inputs == other.inputs
            && self.output == other.output
            && self.body == other.body
    }
}
#[cfg(feature = "full")]
impl Eq for ExprContinue {}
#[cfg(feature = "full")]
impl PartialEq for ExprContinue {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.label == other.label
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprField {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprField {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.base == other.base && self.member == other.member
    }
}
#[cfg(feature = "full")]
impl Eq for ExprForLoop {}
#[cfg(feature = "full")]
impl PartialEq for ExprForLoop {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.label == other.label
            && self.pat == other.pat
            && self.expr == other.expr
            && self.body == other.body
    }
}
#[cfg(feature = "full")]
impl Eq for ExprGroup {}
#[cfg(feature = "full")]
impl PartialEq for ExprGroup {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprIf {}
#[cfg(feature = "full")]
impl PartialEq for ExprIf {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.cond == other.cond
            && self.then_branch == other.then_branch
            && self.else_branch == other.else_branch
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprIndex {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprIndex {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr && self.index == other.index
    }
}
#[cfg(feature = "full")]
impl Eq for ExprLet {}
#[cfg(feature = "full")]
impl PartialEq for ExprLet {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.pat == other.pat && self.expr == other.expr
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprLit {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprLit {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.lit == other.lit
    }
}
#[cfg(feature = "full")]
impl Eq for ExprLoop {}
#[cfg(feature = "full")]
impl PartialEq for ExprLoop {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.label == other.label && self.body == other.body
    }
}
#[cfg(feature = "full")]
impl Eq for ExprMacro {}
#[cfg(feature = "full")]
impl PartialEq for ExprMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mac == other.mac
    }
}
#[cfg(feature = "full")]
impl Eq for ExprMatch {}
#[cfg(feature = "full")]
impl PartialEq for ExprMatch {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr && self.arms == other.arms
    }
}
#[cfg(feature = "full")]
impl Eq for ExprMethodCall {}
#[cfg(feature = "full")]
impl PartialEq for ExprMethodCall {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.receiver == other.receiver
            && self.method == other.method
            && self.turbofish == other.turbofish
            && self.args == other.args
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprParen {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprParen {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprPath {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprPath {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
    }
}
#[cfg(feature = "full")]
impl Eq for ExprRange {}
#[cfg(feature = "full")]
impl PartialEq for ExprRange {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.from == other.from
            && self.limits == other.limits
            && self.to == other.to
    }
}
#[cfg(feature = "full")]
impl Eq for ExprReference {}
#[cfg(feature = "full")]
impl PartialEq for ExprReference {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mutability == other.mutability && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprRepeat {}
#[cfg(feature = "full")]
impl PartialEq for ExprRepeat {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr && self.len == other.len
    }
}
#[cfg(feature = "full")]
impl Eq for ExprReturn {}
#[cfg(feature = "full")]
impl PartialEq for ExprReturn {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprStruct {}
#[cfg(feature = "full")]
impl PartialEq for ExprStruct {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.path == other.path
            && self.fields == other.fields
            && self.dot2_token == other.dot2_token
            && self.rest == other.rest
    }
}
#[cfg(feature = "full")]
impl Eq for ExprTry {}
#[cfg(feature = "full")]
impl PartialEq for ExprTry {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprTryBlock {}
#[cfg(feature = "full")]
impl PartialEq for ExprTryBlock {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ExprTuple {}
#[cfg(feature = "full")]
impl PartialEq for ExprTuple {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.elems == other.elems
    }
}
#[cfg(feature = "full")]
impl Eq for ExprType {}
#[cfg(feature = "full")]
impl PartialEq for ExprType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ExprUnary {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ExprUnary {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.op == other.op && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ExprUnsafe {}
#[cfg(feature = "full")]
impl PartialEq for ExprUnsafe {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ExprWhile {}
#[cfg(feature = "full")]
impl PartialEq for ExprWhile {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.label == other.label
            && self.cond == other.cond
            && self.body == other.body
    }
}
#[cfg(feature = "full")]
impl Eq for ExprYield {}
#[cfg(feature = "full")]
impl PartialEq for ExprYield {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Field {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Field {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.colon_token == other.colon_token
            && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for FieldPat {}
#[cfg(feature = "full")]
impl PartialEq for FieldPat {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.member == other.member
            && self.colon_token == other.colon_token
            && self.pat == other.pat
    }
}
#[cfg(feature = "full")]
impl Eq for FieldValue {}
#[cfg(feature = "full")]
impl PartialEq for FieldValue {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.member == other.member
            && self.colon_token == other.colon_token
            && self.expr == other.expr
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Fields {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Fields {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Fields::Named(self0), Fields::Named(other0)) => self0 == other0,
            (Fields::Unnamed(self0), Fields::Unnamed(other0)) => self0 == other0,
            (Fields::Unit, Fields::Unit) => true,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for FieldsNamed {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for FieldsNamed {
    fn eq(&self, other: &Self) -> bool {
        self.named == other.named
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for FieldsUnnamed {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for FieldsUnnamed {
    fn eq(&self, other: &Self) -> bool {
        self.unnamed == other.unnamed
    }
}
#[cfg(feature = "full")]
impl Eq for File {}
#[cfg(feature = "full")]
impl PartialEq for File {
    fn eq(&self, other: &Self) -> bool {
        self.shebang == other.shebang && self.attrs == other.attrs && self.items == other.items
    }
}
#[cfg(feature = "full")]
impl Eq for FnArg {}
#[cfg(feature = "full")]
impl PartialEq for FnArg {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (FnArg::Receiver(self0), FnArg::Receiver(other0)) => self0 == other0,
            (FnArg::Typed(self0), FnArg::Typed(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for ForeignItem {}
#[cfg(feature = "full")]
impl PartialEq for ForeignItem {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (ForeignItem::Fn(self0), ForeignItem::Fn(other0)) => self0 == other0,
            (ForeignItem::Static(self0), ForeignItem::Static(other0)) => self0 == other0,
            (ForeignItem::Type(self0), ForeignItem::Type(other0)) => self0 == other0,
            (ForeignItem::Macro(self0), ForeignItem::Macro(other0)) => self0 == other0,
            (ForeignItem::Verbatim(self0), ForeignItem::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for ForeignItemFn {}
#[cfg(feature = "full")]
impl PartialEq for ForeignItemFn {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.vis == other.vis && self.sig == other.sig
    }
}
#[cfg(feature = "full")]
impl Eq for ForeignItemMacro {}
#[cfg(feature = "full")]
impl PartialEq for ForeignItemMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for ForeignItemStatic {}
#[cfg(feature = "full")]
impl PartialEq for ForeignItemStatic {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.mutability == other.mutability
            && self.ident == other.ident
            && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for ForeignItemType {}
#[cfg(feature = "full")]
impl PartialEq for ForeignItemType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.vis == other.vis && self.ident == other.ident
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for GenericArgument {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for GenericArgument {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (GenericArgument::Lifetime(self0), GenericArgument::Lifetime(other0)) => {
                self0 == other0
            }
            (GenericArgument::Type(self0), GenericArgument::Type(other0)) => self0 == other0,
            (GenericArgument::Binding(self0), GenericArgument::Binding(other0)) => self0 == other0,
            (GenericArgument::Constraint(self0), GenericArgument::Constraint(other0)) => {
                self0 == other0
            }
            (GenericArgument::Const(self0), GenericArgument::Const(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for GenericMethodArgument {}
#[cfg(feature = "full")]
impl PartialEq for GenericMethodArgument {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (GenericMethodArgument::Type(self0), GenericMethodArgument::Type(other0)) => {
                self0 == other0
            }
            (GenericMethodArgument::Const(self0), GenericMethodArgument::Const(other0)) => {
                self0 == other0
            }
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for GenericParam {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for GenericParam {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (GenericParam::Type(self0), GenericParam::Type(other0)) => self0 == other0,
            (GenericParam::Lifetime(self0), GenericParam::Lifetime(other0)) => self0 == other0,
            (GenericParam::Const(self0), GenericParam::Const(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Generics {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Generics {
    fn eq(&self, other: &Self) -> bool {
        self.lt_token == other.lt_token
            && self.params == other.params
            && self.gt_token == other.gt_token
            && self.where_clause == other.where_clause
    }
}
#[cfg(feature = "full")]
impl Eq for ImplItem {}
#[cfg(feature = "full")]
impl PartialEq for ImplItem {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (ImplItem::Const(self0), ImplItem::Const(other0)) => self0 == other0,
            (ImplItem::Method(self0), ImplItem::Method(other0)) => self0 == other0,
            (ImplItem::Type(self0), ImplItem::Type(other0)) => self0 == other0,
            (ImplItem::Macro(self0), ImplItem::Macro(other0)) => self0 == other0,
            (ImplItem::Verbatim(self0), ImplItem::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for ImplItemConst {}
#[cfg(feature = "full")]
impl PartialEq for ImplItemConst {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.defaultness == other.defaultness
            && self.ident == other.ident
            && self.ty == other.ty
            && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ImplItemMacro {}
#[cfg(feature = "full")]
impl PartialEq for ImplItemMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for ImplItemMethod {}
#[cfg(feature = "full")]
impl PartialEq for ImplItemMethod {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.defaultness == other.defaultness
            && self.sig == other.sig
            && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ImplItemType {}
#[cfg(feature = "full")]
impl PartialEq for ImplItemType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.defaultness == other.defaultness
            && self.ident == other.ident
            && self.generics == other.generics
            && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for Item {}
#[cfg(feature = "full")]
impl PartialEq for Item {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Item::Const(self0), Item::Const(other0)) => self0 == other0,
            (Item::Enum(self0), Item::Enum(other0)) => self0 == other0,
            (Item::ExternCrate(self0), Item::ExternCrate(other0)) => self0 == other0,
            (Item::Fn(self0), Item::Fn(other0)) => self0 == other0,
            (Item::ForeignMod(self0), Item::ForeignMod(other0)) => self0 == other0,
            (Item::Impl(self0), Item::Impl(other0)) => self0 == other0,
            (Item::Macro(self0), Item::Macro(other0)) => self0 == other0,
            (Item::Macro2(self0), Item::Macro2(other0)) => self0 == other0,
            (Item::Mod(self0), Item::Mod(other0)) => self0 == other0,
            (Item::Static(self0), Item::Static(other0)) => self0 == other0,
            (Item::Struct(self0), Item::Struct(other0)) => self0 == other0,
            (Item::Trait(self0), Item::Trait(other0)) => self0 == other0,
            (Item::TraitAlias(self0), Item::TraitAlias(other0)) => self0 == other0,
            (Item::Type(self0), Item::Type(other0)) => self0 == other0,
            (Item::Union(self0), Item::Union(other0)) => self0 == other0,
            (Item::Use(self0), Item::Use(other0)) => self0 == other0,
            (Item::Verbatim(self0), Item::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for ItemConst {}
#[cfg(feature = "full")]
impl PartialEq for ItemConst {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.ty == other.ty
            && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ItemEnum {}
#[cfg(feature = "full")]
impl PartialEq for ItemEnum {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.variants == other.variants
    }
}
#[cfg(feature = "full")]
impl Eq for ItemExternCrate {}
#[cfg(feature = "full")]
impl PartialEq for ItemExternCrate {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.rename == other.rename
    }
}
#[cfg(feature = "full")]
impl Eq for ItemFn {}
#[cfg(feature = "full")]
impl PartialEq for ItemFn {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.sig == other.sig
            && self.block == other.block
    }
}
#[cfg(feature = "full")]
impl Eq for ItemForeignMod {}
#[cfg(feature = "full")]
impl PartialEq for ItemForeignMod {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.abi == other.abi && self.items == other.items
    }
}
#[cfg(feature = "full")]
impl Eq for ItemImpl {}
#[cfg(feature = "full")]
impl PartialEq for ItemImpl {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.defaultness == other.defaultness
            && self.unsafety == other.unsafety
            && self.generics == other.generics
            && self.trait_ == other.trait_
            && self.self_ty == other.self_ty
            && self.items == other.items
    }
}
#[cfg(feature = "full")]
impl Eq for ItemMacro {}
#[cfg(feature = "full")]
impl PartialEq for ItemMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.mac == other.mac
            && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for ItemMacro2 {}
#[cfg(feature = "full")]
impl PartialEq for ItemMacro2 {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && TokenStreamHelper(&self.rules) == TokenStreamHelper(&other.rules)
    }
}
#[cfg(feature = "full")]
impl Eq for ItemMod {}
#[cfg(feature = "full")]
impl PartialEq for ItemMod {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.content == other.content
            && self.semi == other.semi
    }
}
#[cfg(feature = "full")]
impl Eq for ItemStatic {}
#[cfg(feature = "full")]
impl PartialEq for ItemStatic {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.mutability == other.mutability
            && self.ident == other.ident
            && self.ty == other.ty
            && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for ItemStruct {}
#[cfg(feature = "full")]
impl PartialEq for ItemStruct {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.fields == other.fields
            && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for ItemTrait {}
#[cfg(feature = "full")]
impl PartialEq for ItemTrait {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.unsafety == other.unsafety
            && self.auto_token == other.auto_token
            && self.ident == other.ident
            && self.generics == other.generics
            && self.colon_token == other.colon_token
            && self.supertraits == other.supertraits
            && self.items == other.items
    }
}
#[cfg(feature = "full")]
impl Eq for ItemTraitAlias {}
#[cfg(feature = "full")]
impl PartialEq for ItemTraitAlias {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.bounds == other.bounds
    }
}
#[cfg(feature = "full")]
impl Eq for ItemType {}
#[cfg(feature = "full")]
impl PartialEq for ItemType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for ItemUnion {}
#[cfg(feature = "full")]
impl PartialEq for ItemUnion {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.ident == other.ident
            && self.generics == other.generics
            && self.fields == other.fields
    }
}
#[cfg(feature = "full")]
impl Eq for ItemUse {}
#[cfg(feature = "full")]
impl PartialEq for ItemUse {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.vis == other.vis
            && self.leading_colon == other.leading_colon
            && self.tree == other.tree
    }
}
#[cfg(feature = "full")]
impl Eq for Label {}
#[cfg(feature = "full")]
impl PartialEq for Label {
    fn eq(&self, other: &Self) -> bool {
        self.name == other.name
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for LifetimeDef {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for LifetimeDef {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.lifetime == other.lifetime
            && self.colon_token == other.colon_token
            && self.bounds == other.bounds
    }
}
impl Eq for Lit {}
impl PartialEq for Lit {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Lit::Str(self0), Lit::Str(other0)) => self0 == other0,
            (Lit::ByteStr(self0), Lit::ByteStr(other0)) => self0 == other0,
            (Lit::Byte(self0), Lit::Byte(other0)) => self0 == other0,
            (Lit::Char(self0), Lit::Char(other0)) => self0 == other0,
            (Lit::Int(self0), Lit::Int(other0)) => self0 == other0,
            (Lit::Float(self0), Lit::Float(other0)) => self0 == other0,
            (Lit::Bool(self0), Lit::Bool(other0)) => self0 == other0,
            (Lit::Verbatim(self0), Lit::Verbatim(other0)) => {
                self0.to_string() == other0.to_string()
            }
            _ => false,
        }
    }
}
impl Eq for LitBool {}
impl PartialEq for LitBool {
    fn eq(&self, other: &Self) -> bool {
        self.value == other.value
    }
}
impl Eq for LitByte {}
impl Eq for LitByteStr {}
impl Eq for LitChar {}
impl Eq for LitFloat {}
impl Eq for LitInt {}
impl Eq for LitStr {}
#[cfg(feature = "full")]
impl Eq for Local {}
#[cfg(feature = "full")]
impl PartialEq for Local {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.pat == other.pat && self.init == other.init
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Macro {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Macro {
    fn eq(&self, other: &Self) -> bool {
        self.path == other.path
            && self.delimiter == other.delimiter
            && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for MacroDelimiter {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for MacroDelimiter {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (MacroDelimiter::Paren(_), MacroDelimiter::Paren(_)) => true,
            (MacroDelimiter::Brace(_), MacroDelimiter::Brace(_)) => true,
            (MacroDelimiter::Bracket(_), MacroDelimiter::Bracket(_)) => true,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Meta {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Meta {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Meta::Path(self0), Meta::Path(other0)) => self0 == other0,
            (Meta::List(self0), Meta::List(other0)) => self0 == other0,
            (Meta::NameValue(self0), Meta::NameValue(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for MetaList {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for MetaList {
    fn eq(&self, other: &Self) -> bool {
        self.path == other.path && self.nested == other.nested
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for MetaNameValue {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for MetaNameValue {
    fn eq(&self, other: &Self) -> bool {
        self.path == other.path && self.lit == other.lit
    }
}
#[cfg(feature = "full")]
impl Eq for MethodTurbofish {}
#[cfg(feature = "full")]
impl PartialEq for MethodTurbofish {
    fn eq(&self, other: &Self) -> bool {
        self.args == other.args
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for NestedMeta {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for NestedMeta {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (NestedMeta::Meta(self0), NestedMeta::Meta(other0)) => self0 == other0,
            (NestedMeta::Lit(self0), NestedMeta::Lit(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ParenthesizedGenericArguments {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ParenthesizedGenericArguments {
    fn eq(&self, other: &Self) -> bool {
        self.inputs == other.inputs && self.output == other.output
    }
}
#[cfg(feature = "full")]
impl Eq for Pat {}
#[cfg(feature = "full")]
impl PartialEq for Pat {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Pat::Box(self0), Pat::Box(other0)) => self0 == other0,
            (Pat::Ident(self0), Pat::Ident(other0)) => self0 == other0,
            (Pat::Lit(self0), Pat::Lit(other0)) => self0 == other0,
            (Pat::Macro(self0), Pat::Macro(other0)) => self0 == other0,
            (Pat::Or(self0), Pat::Or(other0)) => self0 == other0,
            (Pat::Path(self0), Pat::Path(other0)) => self0 == other0,
            (Pat::Range(self0), Pat::Range(other0)) => self0 == other0,
            (Pat::Reference(self0), Pat::Reference(other0)) => self0 == other0,
            (Pat::Rest(self0), Pat::Rest(other0)) => self0 == other0,
            (Pat::Slice(self0), Pat::Slice(other0)) => self0 == other0,
            (Pat::Struct(self0), Pat::Struct(other0)) => self0 == other0,
            (Pat::Tuple(self0), Pat::Tuple(other0)) => self0 == other0,
            (Pat::TupleStruct(self0), Pat::TupleStruct(other0)) => self0 == other0,
            (Pat::Type(self0), Pat::Type(other0)) => self0 == other0,
            (Pat::Verbatim(self0), Pat::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            (Pat::Wild(self0), Pat::Wild(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for PatBox {}
#[cfg(feature = "full")]
impl PartialEq for PatBox {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.pat == other.pat
    }
}
#[cfg(feature = "full")]
impl Eq for PatIdent {}
#[cfg(feature = "full")]
impl PartialEq for PatIdent {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.by_ref == other.by_ref
            && self.mutability == other.mutability
            && self.ident == other.ident
            && self.subpat == other.subpat
    }
}
#[cfg(feature = "full")]
impl Eq for PatLit {}
#[cfg(feature = "full")]
impl PartialEq for PatLit {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.expr == other.expr
    }
}
#[cfg(feature = "full")]
impl Eq for PatMacro {}
#[cfg(feature = "full")]
impl PartialEq for PatMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mac == other.mac
    }
}
#[cfg(feature = "full")]
impl Eq for PatOr {}
#[cfg(feature = "full")]
impl PartialEq for PatOr {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.leading_vert == other.leading_vert
            && self.cases == other.cases
    }
}
#[cfg(feature = "full")]
impl Eq for PatPath {}
#[cfg(feature = "full")]
impl PartialEq for PatPath {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
    }
}
#[cfg(feature = "full")]
impl Eq for PatRange {}
#[cfg(feature = "full")]
impl PartialEq for PatRange {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.lo == other.lo
            && self.limits == other.limits
            && self.hi == other.hi
    }
}
#[cfg(feature = "full")]
impl Eq for PatReference {}
#[cfg(feature = "full")]
impl PartialEq for PatReference {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mutability == other.mutability && self.pat == other.pat
    }
}
#[cfg(feature = "full")]
impl Eq for PatRest {}
#[cfg(feature = "full")]
impl PartialEq for PatRest {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
    }
}
#[cfg(feature = "full")]
impl Eq for PatSlice {}
#[cfg(feature = "full")]
impl PartialEq for PatSlice {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.elems == other.elems
    }
}
#[cfg(feature = "full")]
impl Eq for PatStruct {}
#[cfg(feature = "full")]
impl PartialEq for PatStruct {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.path == other.path
            && self.fields == other.fields
            && self.dot2_token == other.dot2_token
    }
}
#[cfg(feature = "full")]
impl Eq for PatTuple {}
#[cfg(feature = "full")]
impl PartialEq for PatTuple {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.elems == other.elems
    }
}
#[cfg(feature = "full")]
impl Eq for PatTupleStruct {}
#[cfg(feature = "full")]
impl PartialEq for PatTupleStruct {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.path == other.path && self.pat == other.pat
    }
}
#[cfg(feature = "full")]
impl Eq for PatType {}
#[cfg(feature = "full")]
impl PartialEq for PatType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.pat == other.pat && self.ty == other.ty
    }
}
#[cfg(feature = "full")]
impl Eq for PatWild {}
#[cfg(feature = "full")]
impl PartialEq for PatWild {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Path {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Path {
    fn eq(&self, other: &Self) -> bool {
        self.leading_colon == other.leading_colon && self.segments == other.segments
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for PathArguments {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for PathArguments {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (PathArguments::None, PathArguments::None) => true,
            (PathArguments::AngleBracketed(self0), PathArguments::AngleBracketed(other0)) => {
                self0 == other0
            }
            (PathArguments::Parenthesized(self0), PathArguments::Parenthesized(other0)) => {
                self0 == other0
            }
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for PathSegment {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for PathSegment {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident && self.arguments == other.arguments
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for PredicateEq {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for PredicateEq {
    fn eq(&self, other: &Self) -> bool {
        self.lhs_ty == other.lhs_ty && self.rhs_ty == other.rhs_ty
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for PredicateLifetime {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for PredicateLifetime {
    fn eq(&self, other: &Self) -> bool {
        self.lifetime == other.lifetime && self.bounds == other.bounds
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for PredicateType {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for PredicateType {
    fn eq(&self, other: &Self) -> bool {
        self.lifetimes == other.lifetimes
            && self.bounded_ty == other.bounded_ty
            && self.bounds == other.bounds
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for QSelf {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for QSelf {
    fn eq(&self, other: &Self) -> bool {
        self.ty == other.ty && self.position == other.position && self.as_token == other.as_token
    }
}
#[cfg(feature = "full")]
impl Eq for RangeLimits {}
#[cfg(feature = "full")]
impl PartialEq for RangeLimits {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (RangeLimits::HalfOpen(_), RangeLimits::HalfOpen(_)) => true,
            (RangeLimits::Closed(_), RangeLimits::Closed(_)) => true,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for Receiver {}
#[cfg(feature = "full")]
impl PartialEq for Receiver {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.reference == other.reference
            && self.mutability == other.mutability
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for ReturnType {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for ReturnType {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (ReturnType::Default, ReturnType::Default) => true,
            (ReturnType::Type(_, self1), ReturnType::Type(_, other1)) => self1 == other1,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for Signature {}
#[cfg(feature = "full")]
impl PartialEq for Signature {
    fn eq(&self, other: &Self) -> bool {
        self.constness == other.constness
            && self.asyncness == other.asyncness
            && self.unsafety == other.unsafety
            && self.abi == other.abi
            && self.ident == other.ident
            && self.generics == other.generics
            && self.inputs == other.inputs
            && self.variadic == other.variadic
            && self.output == other.output
    }
}
#[cfg(feature = "full")]
impl Eq for Stmt {}
#[cfg(feature = "full")]
impl PartialEq for Stmt {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Stmt::Local(self0), Stmt::Local(other0)) => self0 == other0,
            (Stmt::Item(self0), Stmt::Item(other0)) => self0 == other0,
            (Stmt::Expr(self0), Stmt::Expr(other0)) => self0 == other0,
            (Stmt::Semi(self0, _), Stmt::Semi(other0, _)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TraitBound {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TraitBound {
    fn eq(&self, other: &Self) -> bool {
        self.paren_token == other.paren_token
            && self.modifier == other.modifier
            && self.lifetimes == other.lifetimes
            && self.path == other.path
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TraitBoundModifier {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TraitBoundModifier {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (TraitBoundModifier::None, TraitBoundModifier::None) => true,
            (TraitBoundModifier::Maybe(_), TraitBoundModifier::Maybe(_)) => true,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for TraitItem {}
#[cfg(feature = "full")]
impl PartialEq for TraitItem {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (TraitItem::Const(self0), TraitItem::Const(other0)) => self0 == other0,
            (TraitItem::Method(self0), TraitItem::Method(other0)) => self0 == other0,
            (TraitItem::Type(self0), TraitItem::Type(other0)) => self0 == other0,
            (TraitItem::Macro(self0), TraitItem::Macro(other0)) => self0 == other0,
            (TraitItem::Verbatim(self0), TraitItem::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for TraitItemConst {}
#[cfg(feature = "full")]
impl PartialEq for TraitItemConst {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.ty == other.ty
            && self.default == other.default
    }
}
#[cfg(feature = "full")]
impl Eq for TraitItemMacro {}
#[cfg(feature = "full")]
impl PartialEq for TraitItemMacro {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for TraitItemMethod {}
#[cfg(feature = "full")]
impl PartialEq for TraitItemMethod {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.sig == other.sig
            && self.default == other.default
            && self.semi_token == other.semi_token
    }
}
#[cfg(feature = "full")]
impl Eq for TraitItemType {}
#[cfg(feature = "full")]
impl PartialEq for TraitItemType {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.generics == other.generics
            && self.colon_token == other.colon_token
            && self.bounds == other.bounds
            && self.default == other.default
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Type {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Type {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Type::Array(self0), Type::Array(other0)) => self0 == other0,
            (Type::BareFn(self0), Type::BareFn(other0)) => self0 == other0,
            (Type::Group(self0), Type::Group(other0)) => self0 == other0,
            (Type::ImplTrait(self0), Type::ImplTrait(other0)) => self0 == other0,
            (Type::Infer(self0), Type::Infer(other0)) => self0 == other0,
            (Type::Macro(self0), Type::Macro(other0)) => self0 == other0,
            (Type::Never(self0), Type::Never(other0)) => self0 == other0,
            (Type::Paren(self0), Type::Paren(other0)) => self0 == other0,
            (Type::Path(self0), Type::Path(other0)) => self0 == other0,
            (Type::Ptr(self0), Type::Ptr(other0)) => self0 == other0,
            (Type::Reference(self0), Type::Reference(other0)) => self0 == other0,
            (Type::Slice(self0), Type::Slice(other0)) => self0 == other0,
            (Type::TraitObject(self0), Type::TraitObject(other0)) => self0 == other0,
            (Type::Tuple(self0), Type::Tuple(other0)) => self0 == other0,
            (Type::Verbatim(self0), Type::Verbatim(other0)) => {
                TokenStreamHelper(self0) == TokenStreamHelper(other0)
            }
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeArray {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeArray {
    fn eq(&self, other: &Self) -> bool {
        self.elem == other.elem && self.len == other.len
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeBareFn {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeBareFn {
    fn eq(&self, other: &Self) -> bool {
        self.lifetimes == other.lifetimes
            && self.unsafety == other.unsafety
            && self.abi == other.abi
            && self.inputs == other.inputs
            && self.variadic == other.variadic
            && self.output == other.output
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeGroup {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeGroup {
    fn eq(&self, other: &Self) -> bool {
        self.elem == other.elem
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeImplTrait {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeImplTrait {
    fn eq(&self, other: &Self) -> bool {
        self.bounds == other.bounds
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeInfer {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeInfer {
    fn eq(&self, _other: &Self) -> bool {
        true
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeMacro {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeMacro {
    fn eq(&self, other: &Self) -> bool {
        self.mac == other.mac
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeNever {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeNever {
    fn eq(&self, _other: &Self) -> bool {
        true
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeParam {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeParam {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.colon_token == other.colon_token
            && self.bounds == other.bounds
            && self.eq_token == other.eq_token
            && self.default == other.default
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeParamBound {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeParamBound {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (TypeParamBound::Trait(self0), TypeParamBound::Trait(other0)) => self0 == other0,
            (TypeParamBound::Lifetime(self0), TypeParamBound::Lifetime(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeParen {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeParen {
    fn eq(&self, other: &Self) -> bool {
        self.elem == other.elem
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypePath {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypePath {
    fn eq(&self, other: &Self) -> bool {
        self.qself == other.qself && self.path == other.path
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypePtr {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypePtr {
    fn eq(&self, other: &Self) -> bool {
        self.const_token == other.const_token
            && self.mutability == other.mutability
            && self.elem == other.elem
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeReference {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeReference {
    fn eq(&self, other: &Self) -> bool {
        self.lifetime == other.lifetime
            && self.mutability == other.mutability
            && self.elem == other.elem
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeSlice {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeSlice {
    fn eq(&self, other: &Self) -> bool {
        self.elem == other.elem
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeTraitObject {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeTraitObject {
    fn eq(&self, other: &Self) -> bool {
        self.dyn_token == other.dyn_token && self.bounds == other.bounds
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for TypeTuple {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for TypeTuple {
    fn eq(&self, other: &Self) -> bool {
        self.elems == other.elems
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for UnOp {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for UnOp {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (UnOp::Deref(_), UnOp::Deref(_)) => true,
            (UnOp::Not(_), UnOp::Not(_)) => true,
            (UnOp::Neg(_), UnOp::Neg(_)) => true,
            _ => false,
        }
    }
}
#[cfg(feature = "full")]
impl Eq for UseGlob {}
#[cfg(feature = "full")]
impl PartialEq for UseGlob {
    fn eq(&self, _other: &Self) -> bool {
        true
    }
}
#[cfg(feature = "full")]
impl Eq for UseGroup {}
#[cfg(feature = "full")]
impl PartialEq for UseGroup {
    fn eq(&self, other: &Self) -> bool {
        self.items == other.items
    }
}
#[cfg(feature = "full")]
impl Eq for UseName {}
#[cfg(feature = "full")]
impl PartialEq for UseName {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident
    }
}
#[cfg(feature = "full")]
impl Eq for UsePath {}
#[cfg(feature = "full")]
impl PartialEq for UsePath {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident && self.tree == other.tree
    }
}
#[cfg(feature = "full")]
impl Eq for UseRename {}
#[cfg(feature = "full")]
impl PartialEq for UseRename {
    fn eq(&self, other: &Self) -> bool {
        self.ident == other.ident && self.rename == other.rename
    }
}
#[cfg(feature = "full")]
impl Eq for UseTree {}
#[cfg(feature = "full")]
impl PartialEq for UseTree {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (UseTree::Path(self0), UseTree::Path(other0)) => self0 == other0,
            (UseTree::Name(self0), UseTree::Name(other0)) => self0 == other0,
            (UseTree::Rename(self0), UseTree::Rename(other0)) => self0 == other0,
            (UseTree::Glob(self0), UseTree::Glob(other0)) => self0 == other0,
            (UseTree::Group(self0), UseTree::Group(other0)) => self0 == other0,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Variadic {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Variadic {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Variant {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Variant {
    fn eq(&self, other: &Self) -> bool {
        self.attrs == other.attrs
            && self.ident == other.ident
            && self.fields == other.fields
            && self.discriminant == other.discriminant
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for VisCrate {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for VisCrate {
    fn eq(&self, _other: &Self) -> bool {
        true
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for VisPublic {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for VisPublic {
    fn eq(&self, _other: &Self) -> bool {
        true
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for VisRestricted {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for VisRestricted {
    fn eq(&self, other: &Self) -> bool {
        self.in_token == other.in_token && self.path == other.path
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for Visibility {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for Visibility {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Visibility::Public(self0), Visibility::Public(other0)) => self0 == other0,
            (Visibility::Crate(self0), Visibility::Crate(other0)) => self0 == other0,
            (Visibility::Restricted(self0), Visibility::Restricted(other0)) => self0 == other0,
            (Visibility::Inherited, Visibility::Inherited) => true,
            _ => false,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for WhereClause {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for WhereClause {
    fn eq(&self, other: &Self) -> bool {
        self.predicates == other.predicates
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Eq for WherePredicate {}
#[cfg(any(feature = "derive", feature = "full"))]
impl PartialEq for WherePredicate {
    fn eq(&self, other: &Self) -> bool {
        match (self, other) {
            (WherePredicate::Type(self0), WherePredicate::Type(other0)) => self0 == other0,
            (WherePredicate::Lifetime(self0), WherePredicate::Lifetime(other0)) => self0 == other0,
            (WherePredicate::Eq(self0), WherePredicate::Eq(other0)) => self0 == other0,
            _ => false,
        }
    }
}
