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

#![allow(clippy::clone_on_copy, clippy::expl_impl_clone_on_copy)]
use crate::*;
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Abi {
    fn clone(&self) -> Self {
        Abi {
            extern_token: self.extern_token.clone(),
            name: self.name.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for AngleBracketedGenericArguments {
    fn clone(&self) -> Self {
        AngleBracketedGenericArguments {
            colon2_token: self.colon2_token.clone(),
            lt_token: self.lt_token.clone(),
            args: self.args.clone(),
            gt_token: self.gt_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Arm {
    fn clone(&self) -> Self {
        Arm {
            attrs: self.attrs.clone(),
            pat: self.pat.clone(),
            guard: self.guard.clone(),
            fat_arrow_token: self.fat_arrow_token.clone(),
            body: self.body.clone(),
            comma: self.comma.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Copy for AttrStyle {}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for AttrStyle {
    fn clone(&self) -> Self {
        *self
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Attribute {
    fn clone(&self) -> Self {
        Attribute {
            pound_token: self.pound_token.clone(),
            style: self.style.clone(),
            bracket_token: self.bracket_token.clone(),
            path: self.path.clone(),
            tokens: self.tokens.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for BareFnArg {
    fn clone(&self) -> Self {
        BareFnArg {
            attrs: self.attrs.clone(),
            name: self.name.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Copy for BinOp {}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for BinOp {
    fn clone(&self) -> Self {
        *self
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Binding {
    fn clone(&self) -> Self {
        Binding {
            ident: self.ident.clone(),
            eq_token: self.eq_token.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Block {
    fn clone(&self) -> Self {
        Block {
            brace_token: self.brace_token.clone(),
            stmts: self.stmts.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for BoundLifetimes {
    fn clone(&self) -> Self {
        BoundLifetimes {
            for_token: self.for_token.clone(),
            lt_token: self.lt_token.clone(),
            lifetimes: self.lifetimes.clone(),
            gt_token: self.gt_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ConstParam {
    fn clone(&self) -> Self {
        ConstParam {
            attrs: self.attrs.clone(),
            const_token: self.const_token.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            eq_token: self.eq_token.clone(),
            default: self.default.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Constraint {
    fn clone(&self) -> Self {
        Constraint {
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
#[cfg(feature = "derive")]
impl Clone for Data {
    fn clone(&self) -> Self {
        match self {
            Data::Struct(v0) => Data::Struct(v0.clone()),
            Data::Enum(v0) => Data::Enum(v0.clone()),
            Data::Union(v0) => Data::Union(v0.clone()),
        }
    }
}
#[cfg(feature = "derive")]
impl Clone for DataEnum {
    fn clone(&self) -> Self {
        DataEnum {
            enum_token: self.enum_token.clone(),
            brace_token: self.brace_token.clone(),
            variants: self.variants.clone(),
        }
    }
}
#[cfg(feature = "derive")]
impl Clone for DataStruct {
    fn clone(&self) -> Self {
        DataStruct {
            struct_token: self.struct_token.clone(),
            fields: self.fields.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "derive")]
impl Clone for DataUnion {
    fn clone(&self) -> Self {
        DataUnion {
            union_token: self.union_token.clone(),
            fields: self.fields.clone(),
        }
    }
}
#[cfg(feature = "derive")]
impl Clone for DeriveInput {
    fn clone(&self) -> Self {
        DeriveInput {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            data: self.data.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Expr {
    fn clone(&self) -> Self {
        match self {
            #[cfg(feature = "full")]
            Expr::Array(v0) => Expr::Array(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Assign(v0) => Expr::Assign(v0.clone()),
            #[cfg(feature = "full")]
            Expr::AssignOp(v0) => Expr::AssignOp(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Async(v0) => Expr::Async(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Await(v0) => Expr::Await(v0.clone()),
            Expr::Binary(v0) => Expr::Binary(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Block(v0) => Expr::Block(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Box(v0) => Expr::Box(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Break(v0) => Expr::Break(v0.clone()),
            Expr::Call(v0) => Expr::Call(v0.clone()),
            Expr::Cast(v0) => Expr::Cast(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Closure(v0) => Expr::Closure(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Continue(v0) => Expr::Continue(v0.clone()),
            Expr::Field(v0) => Expr::Field(v0.clone()),
            #[cfg(feature = "full")]
            Expr::ForLoop(v0) => Expr::ForLoop(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Group(v0) => Expr::Group(v0.clone()),
            #[cfg(feature = "full")]
            Expr::If(v0) => Expr::If(v0.clone()),
            Expr::Index(v0) => Expr::Index(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Let(v0) => Expr::Let(v0.clone()),
            Expr::Lit(v0) => Expr::Lit(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Loop(v0) => Expr::Loop(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Macro(v0) => Expr::Macro(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Match(v0) => Expr::Match(v0.clone()),
            #[cfg(feature = "full")]
            Expr::MethodCall(v0) => Expr::MethodCall(v0.clone()),
            Expr::Paren(v0) => Expr::Paren(v0.clone()),
            Expr::Path(v0) => Expr::Path(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Range(v0) => Expr::Range(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Reference(v0) => Expr::Reference(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Repeat(v0) => Expr::Repeat(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Return(v0) => Expr::Return(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Struct(v0) => Expr::Struct(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Try(v0) => Expr::Try(v0.clone()),
            #[cfg(feature = "full")]
            Expr::TryBlock(v0) => Expr::TryBlock(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Tuple(v0) => Expr::Tuple(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Type(v0) => Expr::Type(v0.clone()),
            Expr::Unary(v0) => Expr::Unary(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Unsafe(v0) => Expr::Unsafe(v0.clone()),
            Expr::Verbatim(v0) => Expr::Verbatim(v0.clone()),
            #[cfg(feature = "full")]
            Expr::While(v0) => Expr::While(v0.clone()),
            #[cfg(feature = "full")]
            Expr::Yield(v0) => Expr::Yield(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprArray {
    fn clone(&self) -> Self {
        ExprArray {
            attrs: self.attrs.clone(),
            bracket_token: self.bracket_token.clone(),
            elems: self.elems.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprAssign {
    fn clone(&self) -> Self {
        ExprAssign {
            attrs: self.attrs.clone(),
            left: self.left.clone(),
            eq_token: self.eq_token.clone(),
            right: self.right.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprAssignOp {
    fn clone(&self) -> Self {
        ExprAssignOp {
            attrs: self.attrs.clone(),
            left: self.left.clone(),
            op: self.op.clone(),
            right: self.right.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprAsync {
    fn clone(&self) -> Self {
        ExprAsync {
            attrs: self.attrs.clone(),
            async_token: self.async_token.clone(),
            capture: self.capture.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprAwait {
    fn clone(&self) -> Self {
        ExprAwait {
            attrs: self.attrs.clone(),
            base: self.base.clone(),
            dot_token: self.dot_token.clone(),
            await_token: self.await_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprBinary {
    fn clone(&self) -> Self {
        ExprBinary {
            attrs: self.attrs.clone(),
            left: self.left.clone(),
            op: self.op.clone(),
            right: self.right.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprBlock {
    fn clone(&self) -> Self {
        ExprBlock {
            attrs: self.attrs.clone(),
            label: self.label.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprBox {
    fn clone(&self) -> Self {
        ExprBox {
            attrs: self.attrs.clone(),
            box_token: self.box_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprBreak {
    fn clone(&self) -> Self {
        ExprBreak {
            attrs: self.attrs.clone(),
            break_token: self.break_token.clone(),
            label: self.label.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprCall {
    fn clone(&self) -> Self {
        ExprCall {
            attrs: self.attrs.clone(),
            func: self.func.clone(),
            paren_token: self.paren_token.clone(),
            args: self.args.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprCast {
    fn clone(&self) -> Self {
        ExprCast {
            attrs: self.attrs.clone(),
            expr: self.expr.clone(),
            as_token: self.as_token.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprClosure {
    fn clone(&self) -> Self {
        ExprClosure {
            attrs: self.attrs.clone(),
            asyncness: self.asyncness.clone(),
            movability: self.movability.clone(),
            capture: self.capture.clone(),
            or1_token: self.or1_token.clone(),
            inputs: self.inputs.clone(),
            or2_token: self.or2_token.clone(),
            output: self.output.clone(),
            body: self.body.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprContinue {
    fn clone(&self) -> Self {
        ExprContinue {
            attrs: self.attrs.clone(),
            continue_token: self.continue_token.clone(),
            label: self.label.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprField {
    fn clone(&self) -> Self {
        ExprField {
            attrs: self.attrs.clone(),
            base: self.base.clone(),
            dot_token: self.dot_token.clone(),
            member: self.member.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprForLoop {
    fn clone(&self) -> Self {
        ExprForLoop {
            attrs: self.attrs.clone(),
            label: self.label.clone(),
            for_token: self.for_token.clone(),
            pat: self.pat.clone(),
            in_token: self.in_token.clone(),
            expr: self.expr.clone(),
            body: self.body.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprGroup {
    fn clone(&self) -> Self {
        ExprGroup {
            attrs: self.attrs.clone(),
            group_token: self.group_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprIf {
    fn clone(&self) -> Self {
        ExprIf {
            attrs: self.attrs.clone(),
            if_token: self.if_token.clone(),
            cond: self.cond.clone(),
            then_branch: self.then_branch.clone(),
            else_branch: self.else_branch.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprIndex {
    fn clone(&self) -> Self {
        ExprIndex {
            attrs: self.attrs.clone(),
            expr: self.expr.clone(),
            bracket_token: self.bracket_token.clone(),
            index: self.index.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprLet {
    fn clone(&self) -> Self {
        ExprLet {
            attrs: self.attrs.clone(),
            let_token: self.let_token.clone(),
            pat: self.pat.clone(),
            eq_token: self.eq_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprLit {
    fn clone(&self) -> Self {
        ExprLit {
            attrs: self.attrs.clone(),
            lit: self.lit.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprLoop {
    fn clone(&self) -> Self {
        ExprLoop {
            attrs: self.attrs.clone(),
            label: self.label.clone(),
            loop_token: self.loop_token.clone(),
            body: self.body.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprMacro {
    fn clone(&self) -> Self {
        ExprMacro {
            attrs: self.attrs.clone(),
            mac: self.mac.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprMatch {
    fn clone(&self) -> Self {
        ExprMatch {
            attrs: self.attrs.clone(),
            match_token: self.match_token.clone(),
            expr: self.expr.clone(),
            brace_token: self.brace_token.clone(),
            arms: self.arms.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprMethodCall {
    fn clone(&self) -> Self {
        ExprMethodCall {
            attrs: self.attrs.clone(),
            receiver: self.receiver.clone(),
            dot_token: self.dot_token.clone(),
            method: self.method.clone(),
            turbofish: self.turbofish.clone(),
            paren_token: self.paren_token.clone(),
            args: self.args.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprParen {
    fn clone(&self) -> Self {
        ExprParen {
            attrs: self.attrs.clone(),
            paren_token: self.paren_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprPath {
    fn clone(&self) -> Self {
        ExprPath {
            attrs: self.attrs.clone(),
            qself: self.qself.clone(),
            path: self.path.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprRange {
    fn clone(&self) -> Self {
        ExprRange {
            attrs: self.attrs.clone(),
            from: self.from.clone(),
            limits: self.limits.clone(),
            to: self.to.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprReference {
    fn clone(&self) -> Self {
        ExprReference {
            attrs: self.attrs.clone(),
            and_token: self.and_token.clone(),
            raw: self.raw.clone(),
            mutability: self.mutability.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprRepeat {
    fn clone(&self) -> Self {
        ExprRepeat {
            attrs: self.attrs.clone(),
            bracket_token: self.bracket_token.clone(),
            expr: self.expr.clone(),
            semi_token: self.semi_token.clone(),
            len: self.len.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprReturn {
    fn clone(&self) -> Self {
        ExprReturn {
            attrs: self.attrs.clone(),
            return_token: self.return_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprStruct {
    fn clone(&self) -> Self {
        ExprStruct {
            attrs: self.attrs.clone(),
            path: self.path.clone(),
            brace_token: self.brace_token.clone(),
            fields: self.fields.clone(),
            dot2_token: self.dot2_token.clone(),
            rest: self.rest.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprTry {
    fn clone(&self) -> Self {
        ExprTry {
            attrs: self.attrs.clone(),
            expr: self.expr.clone(),
            question_token: self.question_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprTryBlock {
    fn clone(&self) -> Self {
        ExprTryBlock {
            attrs: self.attrs.clone(),
            try_token: self.try_token.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprTuple {
    fn clone(&self) -> Self {
        ExprTuple {
            attrs: self.attrs.clone(),
            paren_token: self.paren_token.clone(),
            elems: self.elems.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprType {
    fn clone(&self) -> Self {
        ExprType {
            attrs: self.attrs.clone(),
            expr: self.expr.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ExprUnary {
    fn clone(&self) -> Self {
        ExprUnary {
            attrs: self.attrs.clone(),
            op: self.op.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprUnsafe {
    fn clone(&self) -> Self {
        ExprUnsafe {
            attrs: self.attrs.clone(),
            unsafe_token: self.unsafe_token.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprWhile {
    fn clone(&self) -> Self {
        ExprWhile {
            attrs: self.attrs.clone(),
            label: self.label.clone(),
            while_token: self.while_token.clone(),
            cond: self.cond.clone(),
            body: self.body.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ExprYield {
    fn clone(&self) -> Self {
        ExprYield {
            attrs: self.attrs.clone(),
            yield_token: self.yield_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Field {
    fn clone(&self) -> Self {
        Field {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for FieldPat {
    fn clone(&self) -> Self {
        FieldPat {
            attrs: self.attrs.clone(),
            member: self.member.clone(),
            colon_token: self.colon_token.clone(),
            pat: self.pat.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for FieldValue {
    fn clone(&self) -> Self {
        FieldValue {
            attrs: self.attrs.clone(),
            member: self.member.clone(),
            colon_token: self.colon_token.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Fields {
    fn clone(&self) -> Self {
        match self {
            Fields::Named(v0) => Fields::Named(v0.clone()),
            Fields::Unnamed(v0) => Fields::Unnamed(v0.clone()),
            Fields::Unit => Fields::Unit,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for FieldsNamed {
    fn clone(&self) -> Self {
        FieldsNamed {
            brace_token: self.brace_token.clone(),
            named: self.named.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for FieldsUnnamed {
    fn clone(&self) -> Self {
        FieldsUnnamed {
            paren_token: self.paren_token.clone(),
            unnamed: self.unnamed.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for File {
    fn clone(&self) -> Self {
        File {
            shebang: self.shebang.clone(),
            attrs: self.attrs.clone(),
            items: self.items.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for FnArg {
    fn clone(&self) -> Self {
        match self {
            FnArg::Receiver(v0) => FnArg::Receiver(v0.clone()),
            FnArg::Typed(v0) => FnArg::Typed(v0.clone()),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ForeignItem {
    fn clone(&self) -> Self {
        match self {
            ForeignItem::Fn(v0) => ForeignItem::Fn(v0.clone()),
            ForeignItem::Static(v0) => ForeignItem::Static(v0.clone()),
            ForeignItem::Type(v0) => ForeignItem::Type(v0.clone()),
            ForeignItem::Macro(v0) => ForeignItem::Macro(v0.clone()),
            ForeignItem::Verbatim(v0) => ForeignItem::Verbatim(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ForeignItemFn {
    fn clone(&self) -> Self {
        ForeignItemFn {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            sig: self.sig.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ForeignItemMacro {
    fn clone(&self) -> Self {
        ForeignItemMacro {
            attrs: self.attrs.clone(),
            mac: self.mac.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ForeignItemStatic {
    fn clone(&self) -> Self {
        ForeignItemStatic {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            static_token: self.static_token.clone(),
            mutability: self.mutability.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ForeignItemType {
    fn clone(&self) -> Self {
        ForeignItemType {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            type_token: self.type_token.clone(),
            ident: self.ident.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for GenericArgument {
    fn clone(&self) -> Self {
        match self {
            GenericArgument::Lifetime(v0) => GenericArgument::Lifetime(v0.clone()),
            GenericArgument::Type(v0) => GenericArgument::Type(v0.clone()),
            GenericArgument::Binding(v0) => GenericArgument::Binding(v0.clone()),
            GenericArgument::Constraint(v0) => GenericArgument::Constraint(v0.clone()),
            GenericArgument::Const(v0) => GenericArgument::Const(v0.clone()),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for GenericMethodArgument {
    fn clone(&self) -> Self {
        match self {
            GenericMethodArgument::Type(v0) => GenericMethodArgument::Type(v0.clone()),
            GenericMethodArgument::Const(v0) => GenericMethodArgument::Const(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for GenericParam {
    fn clone(&self) -> Self {
        match self {
            GenericParam::Type(v0) => GenericParam::Type(v0.clone()),
            GenericParam::Lifetime(v0) => GenericParam::Lifetime(v0.clone()),
            GenericParam::Const(v0) => GenericParam::Const(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Generics {
    fn clone(&self) -> Self {
        Generics {
            lt_token: self.lt_token.clone(),
            params: self.params.clone(),
            gt_token: self.gt_token.clone(),
            where_clause: self.where_clause.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ImplItem {
    fn clone(&self) -> Self {
        match self {
            ImplItem::Const(v0) => ImplItem::Const(v0.clone()),
            ImplItem::Method(v0) => ImplItem::Method(v0.clone()),
            ImplItem::Type(v0) => ImplItem::Type(v0.clone()),
            ImplItem::Macro(v0) => ImplItem::Macro(v0.clone()),
            ImplItem::Verbatim(v0) => ImplItem::Verbatim(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ImplItemConst {
    fn clone(&self) -> Self {
        ImplItemConst {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            defaultness: self.defaultness.clone(),
            const_token: self.const_token.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            eq_token: self.eq_token.clone(),
            expr: self.expr.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ImplItemMacro {
    fn clone(&self) -> Self {
        ImplItemMacro {
            attrs: self.attrs.clone(),
            mac: self.mac.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ImplItemMethod {
    fn clone(&self) -> Self {
        ImplItemMethod {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            defaultness: self.defaultness.clone(),
            sig: self.sig.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ImplItemType {
    fn clone(&self) -> Self {
        ImplItemType {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            defaultness: self.defaultness.clone(),
            type_token: self.type_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            eq_token: self.eq_token.clone(),
            ty: self.ty.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Index {
    fn clone(&self) -> Self {
        Index {
            index: self.index.clone(),
            span: self.span.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Item {
    fn clone(&self) -> Self {
        match self {
            Item::Const(v0) => Item::Const(v0.clone()),
            Item::Enum(v0) => Item::Enum(v0.clone()),
            Item::ExternCrate(v0) => Item::ExternCrate(v0.clone()),
            Item::Fn(v0) => Item::Fn(v0.clone()),
            Item::ForeignMod(v0) => Item::ForeignMod(v0.clone()),
            Item::Impl(v0) => Item::Impl(v0.clone()),
            Item::Macro(v0) => Item::Macro(v0.clone()),
            Item::Macro2(v0) => Item::Macro2(v0.clone()),
            Item::Mod(v0) => Item::Mod(v0.clone()),
            Item::Static(v0) => Item::Static(v0.clone()),
            Item::Struct(v0) => Item::Struct(v0.clone()),
            Item::Trait(v0) => Item::Trait(v0.clone()),
            Item::TraitAlias(v0) => Item::TraitAlias(v0.clone()),
            Item::Type(v0) => Item::Type(v0.clone()),
            Item::Union(v0) => Item::Union(v0.clone()),
            Item::Use(v0) => Item::Use(v0.clone()),
            Item::Verbatim(v0) => Item::Verbatim(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemConst {
    fn clone(&self) -> Self {
        ItemConst {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            const_token: self.const_token.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            eq_token: self.eq_token.clone(),
            expr: self.expr.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemEnum {
    fn clone(&self) -> Self {
        ItemEnum {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            enum_token: self.enum_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            brace_token: self.brace_token.clone(),
            variants: self.variants.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemExternCrate {
    fn clone(&self) -> Self {
        ItemExternCrate {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            extern_token: self.extern_token.clone(),
            crate_token: self.crate_token.clone(),
            ident: self.ident.clone(),
            rename: self.rename.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemFn {
    fn clone(&self) -> Self {
        ItemFn {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            sig: self.sig.clone(),
            block: self.block.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemForeignMod {
    fn clone(&self) -> Self {
        ItemForeignMod {
            attrs: self.attrs.clone(),
            abi: self.abi.clone(),
            brace_token: self.brace_token.clone(),
            items: self.items.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemImpl {
    fn clone(&self) -> Self {
        ItemImpl {
            attrs: self.attrs.clone(),
            defaultness: self.defaultness.clone(),
            unsafety: self.unsafety.clone(),
            impl_token: self.impl_token.clone(),
            generics: self.generics.clone(),
            trait_: self.trait_.clone(),
            self_ty: self.self_ty.clone(),
            brace_token: self.brace_token.clone(),
            items: self.items.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemMacro {
    fn clone(&self) -> Self {
        ItemMacro {
            attrs: self.attrs.clone(),
            ident: self.ident.clone(),
            mac: self.mac.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemMacro2 {
    fn clone(&self) -> Self {
        ItemMacro2 {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            macro_token: self.macro_token.clone(),
            ident: self.ident.clone(),
            rules: self.rules.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemMod {
    fn clone(&self) -> Self {
        ItemMod {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            mod_token: self.mod_token.clone(),
            ident: self.ident.clone(),
            content: self.content.clone(),
            semi: self.semi.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemStatic {
    fn clone(&self) -> Self {
        ItemStatic {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            static_token: self.static_token.clone(),
            mutability: self.mutability.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            eq_token: self.eq_token.clone(),
            expr: self.expr.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemStruct {
    fn clone(&self) -> Self {
        ItemStruct {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            struct_token: self.struct_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            fields: self.fields.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemTrait {
    fn clone(&self) -> Self {
        ItemTrait {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            unsafety: self.unsafety.clone(),
            auto_token: self.auto_token.clone(),
            trait_token: self.trait_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            colon_token: self.colon_token.clone(),
            supertraits: self.supertraits.clone(),
            brace_token: self.brace_token.clone(),
            items: self.items.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemTraitAlias {
    fn clone(&self) -> Self {
        ItemTraitAlias {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            trait_token: self.trait_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            eq_token: self.eq_token.clone(),
            bounds: self.bounds.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemType {
    fn clone(&self) -> Self {
        ItemType {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            type_token: self.type_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            eq_token: self.eq_token.clone(),
            ty: self.ty.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemUnion {
    fn clone(&self) -> Self {
        ItemUnion {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            union_token: self.union_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            fields: self.fields.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for ItemUse {
    fn clone(&self) -> Self {
        ItemUse {
            attrs: self.attrs.clone(),
            vis: self.vis.clone(),
            use_token: self.use_token.clone(),
            leading_colon: self.leading_colon.clone(),
            tree: self.tree.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Label {
    fn clone(&self) -> Self {
        Label {
            name: self.name.clone(),
            colon_token: self.colon_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for LifetimeDef {
    fn clone(&self) -> Self {
        LifetimeDef {
            attrs: self.attrs.clone(),
            lifetime: self.lifetime.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
impl Clone for Lit {
    fn clone(&self) -> Self {
        match self {
            Lit::Str(v0) => Lit::Str(v0.clone()),
            Lit::ByteStr(v0) => Lit::ByteStr(v0.clone()),
            Lit::Byte(v0) => Lit::Byte(v0.clone()),
            Lit::Char(v0) => Lit::Char(v0.clone()),
            Lit::Int(v0) => Lit::Int(v0.clone()),
            Lit::Float(v0) => Lit::Float(v0.clone()),
            Lit::Bool(v0) => Lit::Bool(v0.clone()),
            Lit::Verbatim(v0) => Lit::Verbatim(v0.clone()),
        }
    }
}
impl Clone for LitBool {
    fn clone(&self) -> Self {
        LitBool {
            value: self.value.clone(),
            span: self.span.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Local {
    fn clone(&self) -> Self {
        Local {
            attrs: self.attrs.clone(),
            let_token: self.let_token.clone(),
            pat: self.pat.clone(),
            init: self.init.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Macro {
    fn clone(&self) -> Self {
        Macro {
            path: self.path.clone(),
            bang_token: self.bang_token.clone(),
            delimiter: self.delimiter.clone(),
            tokens: self.tokens.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for MacroDelimiter {
    fn clone(&self) -> Self {
        match self {
            MacroDelimiter::Paren(v0) => MacroDelimiter::Paren(v0.clone()),
            MacroDelimiter::Brace(v0) => MacroDelimiter::Brace(v0.clone()),
            MacroDelimiter::Bracket(v0) => MacroDelimiter::Bracket(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Member {
    fn clone(&self) -> Self {
        match self {
            Member::Named(v0) => Member::Named(v0.clone()),
            Member::Unnamed(v0) => Member::Unnamed(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Meta {
    fn clone(&self) -> Self {
        match self {
            Meta::Path(v0) => Meta::Path(v0.clone()),
            Meta::List(v0) => Meta::List(v0.clone()),
            Meta::NameValue(v0) => Meta::NameValue(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for MetaList {
    fn clone(&self) -> Self {
        MetaList {
            path: self.path.clone(),
            paren_token: self.paren_token.clone(),
            nested: self.nested.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for MetaNameValue {
    fn clone(&self) -> Self {
        MetaNameValue {
            path: self.path.clone(),
            eq_token: self.eq_token.clone(),
            lit: self.lit.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for MethodTurbofish {
    fn clone(&self) -> Self {
        MethodTurbofish {
            colon2_token: self.colon2_token.clone(),
            lt_token: self.lt_token.clone(),
            args: self.args.clone(),
            gt_token: self.gt_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for NestedMeta {
    fn clone(&self) -> Self {
        match self {
            NestedMeta::Meta(v0) => NestedMeta::Meta(v0.clone()),
            NestedMeta::Lit(v0) => NestedMeta::Lit(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ParenthesizedGenericArguments {
    fn clone(&self) -> Self {
        ParenthesizedGenericArguments {
            paren_token: self.paren_token.clone(),
            inputs: self.inputs.clone(),
            output: self.output.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Pat {
    fn clone(&self) -> Self {
        match self {
            Pat::Box(v0) => Pat::Box(v0.clone()),
            Pat::Ident(v0) => Pat::Ident(v0.clone()),
            Pat::Lit(v0) => Pat::Lit(v0.clone()),
            Pat::Macro(v0) => Pat::Macro(v0.clone()),
            Pat::Or(v0) => Pat::Or(v0.clone()),
            Pat::Path(v0) => Pat::Path(v0.clone()),
            Pat::Range(v0) => Pat::Range(v0.clone()),
            Pat::Reference(v0) => Pat::Reference(v0.clone()),
            Pat::Rest(v0) => Pat::Rest(v0.clone()),
            Pat::Slice(v0) => Pat::Slice(v0.clone()),
            Pat::Struct(v0) => Pat::Struct(v0.clone()),
            Pat::Tuple(v0) => Pat::Tuple(v0.clone()),
            Pat::TupleStruct(v0) => Pat::TupleStruct(v0.clone()),
            Pat::Type(v0) => Pat::Type(v0.clone()),
            Pat::Verbatim(v0) => Pat::Verbatim(v0.clone()),
            Pat::Wild(v0) => Pat::Wild(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatBox {
    fn clone(&self) -> Self {
        PatBox {
            attrs: self.attrs.clone(),
            box_token: self.box_token.clone(),
            pat: self.pat.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatIdent {
    fn clone(&self) -> Self {
        PatIdent {
            attrs: self.attrs.clone(),
            by_ref: self.by_ref.clone(),
            mutability: self.mutability.clone(),
            ident: self.ident.clone(),
            subpat: self.subpat.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatLit {
    fn clone(&self) -> Self {
        PatLit {
            attrs: self.attrs.clone(),
            expr: self.expr.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatMacro {
    fn clone(&self) -> Self {
        PatMacro {
            attrs: self.attrs.clone(),
            mac: self.mac.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatOr {
    fn clone(&self) -> Self {
        PatOr {
            attrs: self.attrs.clone(),
            leading_vert: self.leading_vert.clone(),
            cases: self.cases.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatPath {
    fn clone(&self) -> Self {
        PatPath {
            attrs: self.attrs.clone(),
            qself: self.qself.clone(),
            path: self.path.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatRange {
    fn clone(&self) -> Self {
        PatRange {
            attrs: self.attrs.clone(),
            lo: self.lo.clone(),
            limits: self.limits.clone(),
            hi: self.hi.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatReference {
    fn clone(&self) -> Self {
        PatReference {
            attrs: self.attrs.clone(),
            and_token: self.and_token.clone(),
            mutability: self.mutability.clone(),
            pat: self.pat.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatRest {
    fn clone(&self) -> Self {
        PatRest {
            attrs: self.attrs.clone(),
            dot2_token: self.dot2_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatSlice {
    fn clone(&self) -> Self {
        PatSlice {
            attrs: self.attrs.clone(),
            bracket_token: self.bracket_token.clone(),
            elems: self.elems.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatStruct {
    fn clone(&self) -> Self {
        PatStruct {
            attrs: self.attrs.clone(),
            path: self.path.clone(),
            brace_token: self.brace_token.clone(),
            fields: self.fields.clone(),
            dot2_token: self.dot2_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatTuple {
    fn clone(&self) -> Self {
        PatTuple {
            attrs: self.attrs.clone(),
            paren_token: self.paren_token.clone(),
            elems: self.elems.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatTupleStruct {
    fn clone(&self) -> Self {
        PatTupleStruct {
            attrs: self.attrs.clone(),
            path: self.path.clone(),
            pat: self.pat.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatType {
    fn clone(&self) -> Self {
        PatType {
            attrs: self.attrs.clone(),
            pat: self.pat.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for PatWild {
    fn clone(&self) -> Self {
        PatWild {
            attrs: self.attrs.clone(),
            underscore_token: self.underscore_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Path {
    fn clone(&self) -> Self {
        Path {
            leading_colon: self.leading_colon.clone(),
            segments: self.segments.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for PathArguments {
    fn clone(&self) -> Self {
        match self {
            PathArguments::None => PathArguments::None,
            PathArguments::AngleBracketed(v0) => PathArguments::AngleBracketed(v0.clone()),
            PathArguments::Parenthesized(v0) => PathArguments::Parenthesized(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for PathSegment {
    fn clone(&self) -> Self {
        PathSegment {
            ident: self.ident.clone(),
            arguments: self.arguments.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for PredicateEq {
    fn clone(&self) -> Self {
        PredicateEq {
            lhs_ty: self.lhs_ty.clone(),
            eq_token: self.eq_token.clone(),
            rhs_ty: self.rhs_ty.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for PredicateLifetime {
    fn clone(&self) -> Self {
        PredicateLifetime {
            lifetime: self.lifetime.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for PredicateType {
    fn clone(&self) -> Self {
        PredicateType {
            lifetimes: self.lifetimes.clone(),
            bounded_ty: self.bounded_ty.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for QSelf {
    fn clone(&self) -> Self {
        QSelf {
            lt_token: self.lt_token.clone(),
            ty: self.ty.clone(),
            position: self.position.clone(),
            as_token: self.as_token.clone(),
            gt_token: self.gt_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Copy for RangeLimits {}
#[cfg(feature = "full")]
impl Clone for RangeLimits {
    fn clone(&self) -> Self {
        *self
    }
}
#[cfg(feature = "full")]
impl Clone for Receiver {
    fn clone(&self) -> Self {
        Receiver {
            attrs: self.attrs.clone(),
            reference: self.reference.clone(),
            mutability: self.mutability.clone(),
            self_token: self.self_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for ReturnType {
    fn clone(&self) -> Self {
        match self {
            ReturnType::Default => ReturnType::Default,
            ReturnType::Type(v0, v1) => ReturnType::Type(v0.clone(), v1.clone()),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Signature {
    fn clone(&self) -> Self {
        Signature {
            constness: self.constness.clone(),
            asyncness: self.asyncness.clone(),
            unsafety: self.unsafety.clone(),
            abi: self.abi.clone(),
            fn_token: self.fn_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            paren_token: self.paren_token.clone(),
            inputs: self.inputs.clone(),
            variadic: self.variadic.clone(),
            output: self.output.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for Stmt {
    fn clone(&self) -> Self {
        match self {
            Stmt::Local(v0) => Stmt::Local(v0.clone()),
            Stmt::Item(v0) => Stmt::Item(v0.clone()),
            Stmt::Expr(v0) => Stmt::Expr(v0.clone()),
            Stmt::Semi(v0, v1) => Stmt::Semi(v0.clone(), v1.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TraitBound {
    fn clone(&self) -> Self {
        TraitBound {
            paren_token: self.paren_token.clone(),
            modifier: self.modifier.clone(),
            lifetimes: self.lifetimes.clone(),
            path: self.path.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Copy for TraitBoundModifier {}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TraitBoundModifier {
    fn clone(&self) -> Self {
        *self
    }
}
#[cfg(feature = "full")]
impl Clone for TraitItem {
    fn clone(&self) -> Self {
        match self {
            TraitItem::Const(v0) => TraitItem::Const(v0.clone()),
            TraitItem::Method(v0) => TraitItem::Method(v0.clone()),
            TraitItem::Type(v0) => TraitItem::Type(v0.clone()),
            TraitItem::Macro(v0) => TraitItem::Macro(v0.clone()),
            TraitItem::Verbatim(v0) => TraitItem::Verbatim(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for TraitItemConst {
    fn clone(&self) -> Self {
        TraitItemConst {
            attrs: self.attrs.clone(),
            const_token: self.const_token.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            ty: self.ty.clone(),
            default: self.default.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for TraitItemMacro {
    fn clone(&self) -> Self {
        TraitItemMacro {
            attrs: self.attrs.clone(),
            mac: self.mac.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for TraitItemMethod {
    fn clone(&self) -> Self {
        TraitItemMethod {
            attrs: self.attrs.clone(),
            sig: self.sig.clone(),
            default: self.default.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for TraitItemType {
    fn clone(&self) -> Self {
        TraitItemType {
            attrs: self.attrs.clone(),
            type_token: self.type_token.clone(),
            ident: self.ident.clone(),
            generics: self.generics.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
            default: self.default.clone(),
            semi_token: self.semi_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Type {
    fn clone(&self) -> Self {
        match self {
            Type::Array(v0) => Type::Array(v0.clone()),
            Type::BareFn(v0) => Type::BareFn(v0.clone()),
            Type::Group(v0) => Type::Group(v0.clone()),
            Type::ImplTrait(v0) => Type::ImplTrait(v0.clone()),
            Type::Infer(v0) => Type::Infer(v0.clone()),
            Type::Macro(v0) => Type::Macro(v0.clone()),
            Type::Never(v0) => Type::Never(v0.clone()),
            Type::Paren(v0) => Type::Paren(v0.clone()),
            Type::Path(v0) => Type::Path(v0.clone()),
            Type::Ptr(v0) => Type::Ptr(v0.clone()),
            Type::Reference(v0) => Type::Reference(v0.clone()),
            Type::Slice(v0) => Type::Slice(v0.clone()),
            Type::TraitObject(v0) => Type::TraitObject(v0.clone()),
            Type::Tuple(v0) => Type::Tuple(v0.clone()),
            Type::Verbatim(v0) => Type::Verbatim(v0.clone()),
            _ => unreachable!(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeArray {
    fn clone(&self) -> Self {
        TypeArray {
            bracket_token: self.bracket_token.clone(),
            elem: self.elem.clone(),
            semi_token: self.semi_token.clone(),
            len: self.len.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeBareFn {
    fn clone(&self) -> Self {
        TypeBareFn {
            lifetimes: self.lifetimes.clone(),
            unsafety: self.unsafety.clone(),
            abi: self.abi.clone(),
            fn_token: self.fn_token.clone(),
            paren_token: self.paren_token.clone(),
            inputs: self.inputs.clone(),
            variadic: self.variadic.clone(),
            output: self.output.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeGroup {
    fn clone(&self) -> Self {
        TypeGroup {
            group_token: self.group_token.clone(),
            elem: self.elem.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeImplTrait {
    fn clone(&self) -> Self {
        TypeImplTrait {
            impl_token: self.impl_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeInfer {
    fn clone(&self) -> Self {
        TypeInfer {
            underscore_token: self.underscore_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeMacro {
    fn clone(&self) -> Self {
        TypeMacro {
            mac: self.mac.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeNever {
    fn clone(&self) -> Self {
        TypeNever {
            bang_token: self.bang_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeParam {
    fn clone(&self) -> Self {
        TypeParam {
            attrs: self.attrs.clone(),
            ident: self.ident.clone(),
            colon_token: self.colon_token.clone(),
            bounds: self.bounds.clone(),
            eq_token: self.eq_token.clone(),
            default: self.default.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeParamBound {
    fn clone(&self) -> Self {
        match self {
            TypeParamBound::Trait(v0) => TypeParamBound::Trait(v0.clone()),
            TypeParamBound::Lifetime(v0) => TypeParamBound::Lifetime(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeParen {
    fn clone(&self) -> Self {
        TypeParen {
            paren_token: self.paren_token.clone(),
            elem: self.elem.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypePath {
    fn clone(&self) -> Self {
        TypePath {
            qself: self.qself.clone(),
            path: self.path.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypePtr {
    fn clone(&self) -> Self {
        TypePtr {
            star_token: self.star_token.clone(),
            const_token: self.const_token.clone(),
            mutability: self.mutability.clone(),
            elem: self.elem.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeReference {
    fn clone(&self) -> Self {
        TypeReference {
            and_token: self.and_token.clone(),
            lifetime: self.lifetime.clone(),
            mutability: self.mutability.clone(),
            elem: self.elem.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeSlice {
    fn clone(&self) -> Self {
        TypeSlice {
            bracket_token: self.bracket_token.clone(),
            elem: self.elem.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeTraitObject {
    fn clone(&self) -> Self {
        TypeTraitObject {
            dyn_token: self.dyn_token.clone(),
            bounds: self.bounds.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for TypeTuple {
    fn clone(&self) -> Self {
        TypeTuple {
            paren_token: self.paren_token.clone(),
            elems: self.elems.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Copy for UnOp {}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for UnOp {
    fn clone(&self) -> Self {
        *self
    }
}
#[cfg(feature = "full")]
impl Clone for UseGlob {
    fn clone(&self) -> Self {
        UseGlob {
            star_token: self.star_token.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for UseGroup {
    fn clone(&self) -> Self {
        UseGroup {
            brace_token: self.brace_token.clone(),
            items: self.items.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for UseName {
    fn clone(&self) -> Self {
        UseName {
            ident: self.ident.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for UsePath {
    fn clone(&self) -> Self {
        UsePath {
            ident: self.ident.clone(),
            colon2_token: self.colon2_token.clone(),
            tree: self.tree.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for UseRename {
    fn clone(&self) -> Self {
        UseRename {
            ident: self.ident.clone(),
            as_token: self.as_token.clone(),
            rename: self.rename.clone(),
        }
    }
}
#[cfg(feature = "full")]
impl Clone for UseTree {
    fn clone(&self) -> Self {
        match self {
            UseTree::Path(v0) => UseTree::Path(v0.clone()),
            UseTree::Name(v0) => UseTree::Name(v0.clone()),
            UseTree::Rename(v0) => UseTree::Rename(v0.clone()),
            UseTree::Glob(v0) => UseTree::Glob(v0.clone()),
            UseTree::Group(v0) => UseTree::Group(v0.clone()),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Variadic {
    fn clone(&self) -> Self {
        Variadic {
            attrs: self.attrs.clone(),
            dots: self.dots.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Variant {
    fn clone(&self) -> Self {
        Variant {
            attrs: self.attrs.clone(),
            ident: self.ident.clone(),
            fields: self.fields.clone(),
            discriminant: self.discriminant.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for VisCrate {
    fn clone(&self) -> Self {
        VisCrate {
            crate_token: self.crate_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for VisPublic {
    fn clone(&self) -> Self {
        VisPublic {
            pub_token: self.pub_token.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for VisRestricted {
    fn clone(&self) -> Self {
        VisRestricted {
            pub_token: self.pub_token.clone(),
            paren_token: self.paren_token.clone(),
            in_token: self.in_token.clone(),
            path: self.path.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for Visibility {
    fn clone(&self) -> Self {
        match self {
            Visibility::Public(v0) => Visibility::Public(v0.clone()),
            Visibility::Crate(v0) => Visibility::Crate(v0.clone()),
            Visibility::Restricted(v0) => Visibility::Restricted(v0.clone()),
            Visibility::Inherited => Visibility::Inherited,
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for WhereClause {
    fn clone(&self) -> Self {
        WhereClause {
            where_token: self.where_token.clone(),
            predicates: self.predicates.clone(),
        }
    }
}
#[cfg(any(feature = "derive", feature = "full"))]
impl Clone for WherePredicate {
    fn clone(&self) -> Self {
        match self {
            WherePredicate::Type(v0) => WherePredicate::Type(v0.clone()),
            WherePredicate::Lifetime(v0) => WherePredicate::Lifetime(v0.clone()),
            WherePredicate::Eq(v0) => WherePredicate::Eq(v0.clone()),
        }
    }
}
