Skip to main content

serde_derive/de/
enum_adjacently.rs

1//! Deserialization for adjacently tagged enums:
2//!
3//! ```ignore
4//! #[serde(tag = "...", content = "...")]
5//! enum Enum {}
6//! ```
7
8use crate::de::enum_;
9use crate::de::enum_untagged;
10use crate::de::{field_i, Parameters};
11use crate::fragment::{Fragment, Match};
12use crate::internals::ast::{Style, Variant};
13use crate::internals::attr;
14use crate::private;
15use quote::{quote, quote_spanned};
16use syn::spanned::Spanned;
17
18/// Generates `Deserialize::deserialize` body for an `enum Enum {...}` with `#[serde(tag, content)]` attributes
19pub(super) fn deserialize(
20    params: &Parameters,
21    variants: &[Variant],
22    cattrs: &attr::Container,
23    tag: &str,
24    content: &str,
25) -> Fragment {
26    let this_type = &params.this_type;
27    let this_value = &params.this_value;
28    let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
29        params.generics_with_de_lifetime();
30    let delife = params.borrowed.de_lifetime();
31
32    let (variants_stmt, variant_visitor) = enum_::prepare_enum_variant_enum(variants);
33
34    let mut variant_arms = Vec::new();
35    for (i, variant) in variants.iter().enumerate() {
36        if variant.attrs.skip_deserializing() {
37            continue;
38        }
39        let variant_index = field_i(i);
40
41        let block = Match(enum_untagged::deserialize_variant(params, variant, cattrs));
42
43        variant_arms.push({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "__Field");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&variant_index, &mut _s);
    ::quote::__private::push_fat_arrow(&mut _s);
    ::quote::ToTokens::to_tokens(&block, &mut _s);
    _s
}quote! {
44            __Field::#variant_index => #block
45        });
46    }
47
48    let rust_name = params.type_name();
49    let expecting = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("adjacently tagged enum {0}",
                rust_name))
    })format!("adjacently tagged enum {}", rust_name);
50    let expecting = cattrs.expecting().unwrap_or(&expecting);
51    let type_name = cattrs.name().deserialize_name();
52    let deny_unknown_fields = cattrs.deny_unknown_fields();
53
54    // If unknown fields are allowed, we pick the visitor that can step over
55    // those. Otherwise we pick the visitor that fails on unknown keys.
56    let field_visitor_ty = if deny_unknown_fields {
57        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "TagOrContentFieldVisitor");
    _s
}quote! { _serde::#private::de::TagOrContentFieldVisitor }
58    } else {
59        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "TagContentOtherFieldVisitor");
    _s
}quote! { _serde::#private::de::TagContentOtherFieldVisitor }
60    };
61
62    let mut missing_content = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Err");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__A");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Error");
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "de");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Error");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "missing_field");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::ToTokens::to_tokens(&content, &mut _s);
                    _s
                });
            _s
        });
    _s
}quote! {
63        _serde::#private::Err(<__A::Error as _serde::de::Error>::missing_field(#content))
64    };
65    let mut missing_content_fallthrough = ::quote::__private::TokenStream::new()quote!();
66    let mut missing_content_arms = Vec::new();
67    for (i, variant) in variants.iter().enumerate() {
68        if variant.attrs.skip_deserializing() {
69            continue;
70        }
71        let variant_index = field_i(i);
72        let variant_ident = &variant.ident;
73
74        let arm = match variant.style {
75            Style::Unit => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Ok");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&this_value, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&variant_ident, &mut _s);
            _s
        });
    _s
}quote! {
76                _serde::#private::Ok(#this_value::#variant_ident)
77            },
78            Style::Newtype if variant.attrs.deserialize_with().is_none() => {
79                let span = variant.original.span();
80                let func = {
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "_serde");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "de");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "missing_field");
    _s
}quote_spanned!(span=> _serde::#private::de::missing_field);
81                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&func, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&content, &mut _s);
            _s
        });
    ::quote::__private::push_dot(&mut _s);
    ::quote::__private::push_ident(&mut _s, "map");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&this_value, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&variant_ident, &mut _s);
            _s
        });
    _s
}quote! {
82                    #func(#content).map(#this_value::#variant_ident)
83                }
84            }
85            _ => {
86                missing_content_fallthrough = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_fat_arrow(&mut _s);
    ::quote::ToTokens::to_tokens(&missing_content, &mut _s);
    _s
}quote!(_ => #missing_content);
87                continue;
88            }
89        };
90        missing_content_arms.push({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "__Field");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&variant_index, &mut _s);
    ::quote::__private::push_fat_arrow(&mut _s);
    ::quote::ToTokens::to_tokens(&arm, &mut _s);
    ::quote::__private::push_comma(&mut _s);
    _s
}quote! {
91            __Field::#variant_index => #arm,
92        });
93    }
94
95    if !missing_content_arms.is_empty() {
96        missing_content = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "match");
    ::quote::__private::push_ident(&mut _s, "__field");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut missing_content_arms, i) =
                    missing_content_arms.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let missing_content_arms =
                        match missing_content_arms.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&missing_content_arms,
                        &mut _s);
                }
            }
            ::quote::ToTokens::to_tokens(&missing_content_fallthrough,
                &mut _s);
            _s
        });
    _s
}quote! {
97            match __field {
98                #(#missing_content_arms)*
99                #missing_content_fallthrough
100            }
101        };
102    }
103
104    // Advance the map by one key, returning early in case of error.
105    let next_key = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "MapAccess");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "next_key_seed");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_and(&mut _s);
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_ident(&mut _s, "__map");
            ::quote::__private::push_comma(&mut _s);
            ::quote::ToTokens::to_tokens(&field_visitor_ty, &mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "tag");
                    ::quote::__private::push_colon(&mut _s);
                    ::quote::ToTokens::to_tokens(&tag, &mut _s);
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "content");
                    ::quote::__private::push_colon(&mut _s);
                    ::quote::ToTokens::to_tokens(&content, &mut _s);
                    ::quote::__private::push_comma(&mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_question(&mut _s);
    _s
}quote! {
106        _serde::de::MapAccess::next_key_seed(&mut __map, #field_visitor_ty {
107            tag: #tag,
108            content: #content,
109        })?
110    };
111
112    let variant_from_map = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "MapAccess");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "next_value_seed");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_and(&mut _s);
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_ident(&mut _s, "__map");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "de");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s,
                "AdjacentlyTaggedEnumVariantSeed");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__Field");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "enum_name");
                    ::quote::__private::push_colon(&mut _s);
                    ::quote::ToTokens::to_tokens(&rust_name, &mut _s);
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "variants");
                    ::quote::__private::push_colon(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "VARIANTS");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "fields_enum");
                    ::quote::__private::push_colon(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "_serde");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "PhantomData");
                    _s
                });
            _s
        });
    ::quote::__private::push_question(&mut _s);
    _s
}quote! {
113        _serde::de::MapAccess::next_value_seed(&mut __map, _serde::#private::de::AdjacentlyTaggedEnumVariantSeed::<__Field> {
114            enum_name: #rust_name,
115            variants: VARIANTS,
116            fields_enum: _serde::#private::PhantomData
117        })?
118    };
119
120    // When allowing unknown fields, we want to transparently step through keys
121    // we don't care about until we find `tag`, `content`, or run out of keys.
122    let next_relevant_key = if deny_unknown_fields {
123        next_key
124    } else {
125        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "let");
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_ident(&mut _s, "__rk");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Option");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "de");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "TagOrContentField");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_eq(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "None");
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_ident(&mut _s, "while");
            ::quote::__private::push_ident(&mut _s, "let");
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Some");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "__k");
                    _s
                });
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&next_key, &mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "match");
                    ::quote::__private::push_ident(&mut _s, "__k");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "_serde");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::ToTokens::to_tokens(&private, &mut _s);
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "de");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s,
                                "TagContentOtherField");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Other");
                            ::quote::__private::push_fat_arrow(&mut _s);
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::__private::push_ident(&mut _s, "let");
                                    ::quote::__private::push_underscore(&mut _s);
                                    ::quote::__private::push_eq(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "_serde");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "de");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "MapAccess");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "next_value");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_lt(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "_serde");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "de");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "IgnoredAny");
                                    ::quote::__private::push_gt(&mut _s);
                                    ::quote::__private::push_group(&mut _s,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            ::quote::__private::push_and(&mut _s);
                                            ::quote::__private::push_ident(&mut _s, "mut");
                                            ::quote::__private::push_ident(&mut _s, "__map");
                                            _s
                                        });
                                    ::quote::__private::push_question(&mut _s);
                                    ::quote::__private::push_semi(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "continue");
                                    ::quote::__private::push_semi(&mut _s);
                                    _s
                                });
                            ::quote::__private::push_comma(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "_serde");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::ToTokens::to_tokens(&private, &mut _s);
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "de");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s,
                                "TagContentOtherField");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Tag");
                            ::quote::__private::push_fat_arrow(&mut _s);
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::__private::push_ident(&mut _s, "__rk");
                                    ::quote::__private::push_eq(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "_serde");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "Some");
                                    ::quote::__private::push_group(&mut _s,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            ::quote::__private::push_ident(&mut _s, "_serde");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::ToTokens::to_tokens(&private, &mut _s);
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s, "de");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s,
                                                "TagOrContentField");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s, "Tag");
                                            _s
                                        });
                                    ::quote::__private::push_semi(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "break");
                                    ::quote::__private::push_semi(&mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident(&mut _s, "_serde");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::ToTokens::to_tokens(&private, &mut _s);
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "de");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s,
                                "TagContentOtherField");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Content");
                            ::quote::__private::push_fat_arrow(&mut _s);
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::__private::push_ident(&mut _s, "__rk");
                                    ::quote::__private::push_eq(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "_serde");
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                                    ::quote::__private::push_colon2(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "Some");
                                    ::quote::__private::push_group(&mut _s,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            ::quote::__private::push_ident(&mut _s, "_serde");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::ToTokens::to_tokens(&private, &mut _s);
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s, "de");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s,
                                                "TagOrContentField");
                                            ::quote::__private::push_colon2(&mut _s);
                                            ::quote::__private::push_ident(&mut _s, "Content");
                                            _s
                                        });
                                    ::quote::__private::push_semi(&mut _s);
                                    ::quote::__private::push_ident(&mut _s, "break");
                                    ::quote::__private::push_semi(&mut _s);
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "__rk");
            _s
        });
    _s
}quote!({
126            let mut __rk : _serde::#private::Option<_serde::#private::de::TagOrContentField> = _serde::#private::None;
127            while let _serde::#private::Some(__k) = #next_key {
128                match __k {
129                    _serde::#private::de::TagContentOtherField::Other => {
130                        let _ = _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
131                        continue;
132                    },
133                    _serde::#private::de::TagContentOtherField::Tag => {
134                        __rk = _serde::#private::Some(_serde::#private::de::TagOrContentField::Tag);
135                        break;
136                    }
137                    _serde::#private::de::TagContentOtherField::Content => {
138                        __rk = _serde::#private::Some(_serde::#private::de::TagOrContentField::Content);
139                        break;
140                    }
141                }
142            }
143
144            __rk
145        })
146    };
147
148    // Step through remaining keys, looking for duplicates of previously-seen
149    // keys. When unknown fields are denied, any key that isn't a duplicate will
150    // at this point immediately produce an error.
151    let visit_remaining_keys = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "match");
    ::quote::ToTokens::to_tokens(&next_relevant_key, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Some");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "_serde");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "de");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "TagOrContentField");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "Tag");
                    _s
                });
            ::quote::__private::push_fat_arrow(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "_serde");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "Err");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_lt(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "__A");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Error");
                            ::quote::__private::push_ident(&mut _s, "as");
                            ::quote::__private::push_ident(&mut _s, "_serde");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "de");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Error");
                            ::quote::__private::push_gt(&mut _s);
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "duplicate_field");
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::ToTokens::to_tokens(&tag, &mut _s);
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Some");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "_serde");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "de");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "TagOrContentField");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "Content");
                    _s
                });
            ::quote::__private::push_fat_arrow(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "_serde");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::ToTokens::to_tokens(&private, &mut _s);
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "Err");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_lt(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "__A");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Error");
                            ::quote::__private::push_ident(&mut _s, "as");
                            ::quote::__private::push_ident(&mut _s, "_serde");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "de");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "Error");
                            ::quote::__private::push_gt(&mut _s);
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "duplicate_field");
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::ToTokens::to_tokens(&content, &mut _s);
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "None");
            ::quote::__private::push_fat_arrow(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Ok");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "__ret");
                    _s
                });
            ::quote::__private::push_comma(&mut _s);
            _s
        });
    _s
}quote! {
152        match #next_relevant_key {
153            _serde::#private::Some(_serde::#private::de::TagOrContentField::Tag) => {
154                _serde::#private::Err(<__A::Error as _serde::de::Error>::duplicate_field(#tag))
155            }
156            _serde::#private::Some(_serde::#private::de::TagOrContentField::Content) => {
157                _serde::#private::Err(<__A::Error as _serde::de::Error>::duplicate_field(#content))
158            }
159            _serde::#private::None => _serde::#private::Ok(__ret),
160        }
161    };
162
163    let finish_content_then_tag = if variant_arms.is_empty() {
164        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "match");
    ::quote::ToTokens::to_tokens(&variant_from_map, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        ::quote::__private::TokenStream::new());
    _s
}quote! {
165            match #variant_from_map {}
166        }
167    } else {
168        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_ident(&mut _s, "__seed");
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_ident(&mut _s, "__Seed");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "variant");
            ::quote::__private::push_colon(&mut _s);
            ::quote::ToTokens::to_tokens(&variant_from_map, &mut _s);
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "PhantomData");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "lifetime");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_ident(&mut _s, "_serde");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::ToTokens::to_tokens(&private, &mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "PhantomData");
            ::quote::__private::push_comma(&mut _s);
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_ident(&mut _s, "__deserializer");
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::ToTokens::to_tokens(&private, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ContentDeserializer");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_ident(&mut _s, "__A");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Error");
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "new");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "__content");
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_ident(&mut _s, "__ret");
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_ident(&mut _s, "_serde");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "de");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "DeserializeSeed");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "deserialize");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "__seed");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__deserializer");
            _s
        });
    ::quote::__private::push_question(&mut _s);
    ::quote::__private::push_semi(&mut _s);
    ::quote::ToTokens::to_tokens(&visit_remaining_keys, &mut _s);
    _s
}quote! {
169            let __seed = __Seed {
170                variant: #variant_from_map,
171                marker: _serde::#private::PhantomData,
172                lifetime: _serde::#private::PhantomData,
173            };
174            let __deserializer = _serde::#private::de::ContentDeserializer::<__A::Error>::new(__content);
175            let __ret = _serde::de::DeserializeSeed::deserialize(__seed, __deserializer)?;
176            // Visit remaining keys, looking for duplicates.
177            #visit_remaining_keys
178        }
179    };
180
181    crate::fragment::Fragment::Block({
        let mut _s = ::quote::__private::TokenStream::new();
        ::quote::ToTokens::to_tokens(&variant_visitor, &mut _s);
        ::quote::ToTokens::to_tokens(&variants_stmt, &mut _s);
        ::quote::__private::push_pound(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "doc");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "hidden");
                        _s
                    });
                _s
            });
        ::quote::__private::push_ident(&mut _s, "struct");
        ::quote::__private::push_ident(&mut _s, "__Seed");
        ::quote::ToTokens::to_tokens(&de_impl_generics, &mut _s);
        ::quote::ToTokens::to_tokens(&where_clause, &mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Brace,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "variant");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__Field");
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "marker");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "PhantomData");
                ::quote::__private::push_lt(&mut _s);
                ::quote::ToTokens::to_tokens(&this_type, &mut _s);
                ::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "lifetime");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "PhantomData");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_and(&mut _s);
                ::quote::ToTokens::to_tokens(&delife, &mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    ::quote::__private::TokenStream::new());
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                _s
            });
        ::quote::__private::push_pound(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s,
                    "automatically_derived");
                _s
            });
        ::quote::__private::push_ident(&mut _s, "impl");
        ::quote::ToTokens::to_tokens(&de_impl_generics, &mut _s);
        ::quote::__private::push_ident(&mut _s, "_serde");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "de");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "DeserializeSeed");
        ::quote::__private::push_lt(&mut _s);
        ::quote::ToTokens::to_tokens(&delife, &mut _s);
        ::quote::__private::push_gt(&mut _s);
        ::quote::__private::push_ident(&mut _s, "for");
        ::quote::__private::push_ident(&mut _s, "__Seed");
        ::quote::ToTokens::to_tokens(&de_ty_generics, &mut _s);
        ::quote::ToTokens::to_tokens(&where_clause, &mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Brace,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "type");
                ::quote::__private::push_ident(&mut _s, "Value");
                ::quote::__private::push_eq(&mut _s);
                ::quote::ToTokens::to_tokens(&this_type, &mut _s);
                ::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
                ::quote::__private::push_semi(&mut _s);
                ::quote::__private::push_ident(&mut _s, "fn");
                ::quote::__private::push_ident(&mut _s, "deserialize");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__D");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "self");
                        ::quote::__private::push_comma(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "__deserializer");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "__D");
                        _s
                    });
                ::quote::__private::push_rarrow(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Result");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Self");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Value");
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__D");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Error");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "where");
                ::quote::__private::push_ident(&mut _s, "__D");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Deserializer");
                ::quote::__private::push_lt(&mut _s);
                ::quote::ToTokens::to_tokens(&delife, &mut _s);
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Brace,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "match");
                        ::quote::__private::push_ident(&mut _s, "self");
                        ::quote::__private::push_dot(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "variant");
                        ::quote::__private::push_group(&mut _s,
                            ::quote::__private::Delimiter::Brace,
                            {
                                let mut _s = ::quote::__private::TokenStream::new();
                                {
                                    use ::quote::__private::ext::*;
                                    let has_iter = ::quote::__private::HasIterator::<false>;
                                    #[allow(unused_mut)]
                                    let (mut variant_arms, i) = variant_arms.quote_into_iter();
                                    let has_iter = has_iter | i;
                                    <_ as
                                            ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                                    while true {
                                        let variant_arms =
                                            match variant_arms.next() {
                                                Some(_x) => ::quote::__private::RepInterp(_x),
                                                None => break,
                                            };
                                        ::quote::ToTokens::to_tokens(&variant_arms, &mut _s);
                                    }
                                }
                                _s
                            });
                        _s
                    });
                _s
            });
        ::quote::__private::push_pound(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "doc");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "hidden");
                        _s
                    });
                _s
            });
        ::quote::__private::push_ident(&mut _s, "struct");
        ::quote::__private::push_ident(&mut _s, "__Visitor");
        ::quote::ToTokens::to_tokens(&de_impl_generics, &mut _s);
        ::quote::ToTokens::to_tokens(&where_clause, &mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Brace,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "marker");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "PhantomData");
                ::quote::__private::push_lt(&mut _s);
                ::quote::ToTokens::to_tokens(&this_type, &mut _s);
                ::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "lifetime");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "PhantomData");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_and(&mut _s);
                ::quote::ToTokens::to_tokens(&delife, &mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    ::quote::__private::TokenStream::new());
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                _s
            });
        ::quote::__private::push_pound(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s,
                    "automatically_derived");
                _s
            });
        ::quote::__private::push_ident(&mut _s, "impl");
        ::quote::ToTokens::to_tokens(&de_impl_generics, &mut _s);
        ::quote::__private::push_ident(&mut _s, "_serde");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "de");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "Visitor");
        ::quote::__private::push_lt(&mut _s);
        ::quote::ToTokens::to_tokens(&delife, &mut _s);
        ::quote::__private::push_gt(&mut _s);
        ::quote::__private::push_ident(&mut _s, "for");
        ::quote::__private::push_ident(&mut _s, "__Visitor");
        ::quote::ToTokens::to_tokens(&de_ty_generics, &mut _s);
        ::quote::ToTokens::to_tokens(&where_clause, &mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Brace,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "type");
                ::quote::__private::push_ident(&mut _s, "Value");
                ::quote::__private::push_eq(&mut _s);
                ::quote::ToTokens::to_tokens(&this_type, &mut _s);
                ::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
                ::quote::__private::push_semi(&mut _s);
                ::quote::__private::push_ident(&mut _s, "fn");
                ::quote::__private::push_ident(&mut _s, "expecting");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_and(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "self");
                        ::quote::__private::push_comma(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "__formatter");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_and(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "mut");
                        ::quote::__private::push_ident(&mut _s, "_serde");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "Formatter");
                        _s
                    });
                ::quote::__private::push_rarrow(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "fmt");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Result");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Brace,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "_serde");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "Formatter");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "write_str");
                        ::quote::__private::push_group(&mut _s,
                            ::quote::__private::Delimiter::Parenthesis,
                            {
                                let mut _s = ::quote::__private::TokenStream::new();
                                ::quote::__private::push_ident(&mut _s, "__formatter");
                                ::quote::__private::push_comma(&mut _s);
                                ::quote::ToTokens::to_tokens(&expecting, &mut _s);
                                _s
                            });
                        _s
                    });
                ::quote::__private::push_ident(&mut _s, "fn");
                ::quote::__private::push_ident(&mut _s, "visit_map");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "self");
                        ::quote::__private::push_comma(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "mut");
                        ::quote::__private::push_ident(&mut _s, "__map");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "__A");
                        _s
                    });
                ::quote::__private::push_rarrow(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Result");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Self");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Value");
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Error");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "where");
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "de");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "MapAccess");
                ::quote::__private::push_lt(&mut _s);
                ::quote::ToTokens::to_tokens(&delife, &mut _s);
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Brace,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "match");
                        ::quote::ToTokens::to_tokens(&next_relevant_key, &mut _s);
                        ::quote::__private::push_group(&mut _s,
                            ::quote::__private::Delimiter::Brace,
                            {
                                let mut _s = ::quote::__private::TokenStream::new();
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Some");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "de");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s,
                                            "TagOrContentField");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "Tag");
                                        _s
                                    });
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Brace,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "let");
                                        ::quote::__private::push_ident(&mut _s, "__field");
                                        ::quote::__private::push_eq(&mut _s);
                                        ::quote::ToTokens::to_tokens(&variant_from_map, &mut _s);
                                        ::quote::__private::push_semi(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "match");
                                        ::quote::ToTokens::to_tokens(&next_relevant_key, &mut _s);
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Brace,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Some");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "de");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s,
                                                            "TagOrContentField");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Tag");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Err");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_lt(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "__A");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_ident(&mut _s, "as");
                                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "de");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_gt(&mut _s);
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "duplicate_field");
                                                                ::quote::__private::push_group(&mut _s,
                                                                    ::quote::__private::Delimiter::Parenthesis,
                                                                    {
                                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                                        ::quote::ToTokens::to_tokens(&tag, &mut _s);
                                                                        _s
                                                                    });
                                                                _s
                                                            });
                                                        _s
                                                    });
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Some");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "de");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s,
                                                            "TagOrContentField");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Content");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "let");
                                                        ::quote::__private::push_ident(&mut _s, "__ret");
                                                        ::quote::__private::push_eq(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "de");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "MapAccess");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "next_value_seed");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_and(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "mut");
                                                                ::quote::__private::push_ident(&mut _s, "__map");
                                                                ::quote::__private::push_comma(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "__Seed");
                                                                ::quote::__private::push_group(&mut _s,
                                                                    ::quote::__private::Delimiter::Brace,
                                                                    {
                                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                                        ::quote::__private::push_ident(&mut _s, "variant");
                                                                        ::quote::__private::push_colon(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "__field");
                                                                        ::quote::__private::push_comma(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "marker");
                                                                        ::quote::__private::push_colon(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                                        ::quote::__private::push_colon2(&mut _s);
                                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                                        ::quote::__private::push_colon2(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                                                                        ::quote::__private::push_comma(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "lifetime");
                                                                        ::quote::__private::push_colon(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                                        ::quote::__private::push_colon2(&mut _s);
                                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                                        ::quote::__private::push_colon2(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                                                                        ::quote::__private::push_comma(&mut _s);
                                                                        _s
                                                                    });
                                                                _s
                                                            });
                                                        ::quote::__private::push_question(&mut _s);
                                                        ::quote::__private::push_semi(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&visit_remaining_keys,
                                                            &mut _s);
                                                        _s
                                                    });
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "None");
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::ToTokens::to_tokens(&missing_content, &mut _s);
                                                _s
                                            });
                                        _s
                                    });
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Some");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "de");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s,
                                            "TagOrContentField");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "Content");
                                        _s
                                    });
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Brace,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "let");
                                        ::quote::__private::push_ident(&mut _s, "__content");
                                        ::quote::__private::push_eq(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "de");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "MapAccess");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "next_value_seed");
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Parenthesis,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_and(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "mut");
                                                ::quote::__private::push_ident(&mut _s, "__map");
                                                ::quote::__private::push_comma(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "de");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "ContentVisitor");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "new");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    ::quote::__private::TokenStream::new());
                                                _s
                                            });
                                        ::quote::__private::push_question(&mut _s);
                                        ::quote::__private::push_semi(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "match");
                                        ::quote::ToTokens::to_tokens(&next_relevant_key, &mut _s);
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Brace,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Some");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "de");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s,
                                                            "TagOrContentField");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Tag");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::ToTokens::to_tokens(&finish_content_then_tag,
                                                            &mut _s);
                                                        _s
                                                    });
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Some");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "de");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s,
                                                            "TagOrContentField");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Content");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Err");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_lt(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "__A");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_ident(&mut _s, "as");
                                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "de");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_gt(&mut _s);
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "duplicate_field");
                                                                ::quote::__private::push_group(&mut _s,
                                                                    ::quote::__private::Delimiter::Parenthesis,
                                                                    {
                                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                                        ::quote::ToTokens::to_tokens(&content, &mut _s);
                                                                        _s
                                                                    });
                                                                _s
                                                            });
                                                        _s
                                                    });
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "None");
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Err");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_lt(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "__A");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_ident(&mut _s, "as");
                                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "de");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_gt(&mut _s);
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "missing_field");
                                                                ::quote::__private::push_group(&mut _s,
                                                                    ::quote::__private::Delimiter::Parenthesis,
                                                                    {
                                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                                        ::quote::ToTokens::to_tokens(&tag, &mut _s);
                                                                        _s
                                                                    });
                                                                _s
                                                            });
                                                        _s
                                                    });
                                                _s
                                            });
                                        _s
                                    });
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "None");
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Brace,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "Err");
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Parenthesis,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_lt(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "__A");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                ::quote::__private::push_ident(&mut _s, "as");
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "de");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                ::quote::__private::push_gt(&mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "missing_field");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::ToTokens::to_tokens(&tag, &mut _s);
                                                        _s
                                                    });
                                                _s
                                            });
                                        _s
                                    });
                                _s
                            });
                        _s
                    });
                ::quote::__private::push_ident(&mut _s, "fn");
                ::quote::__private::push_ident(&mut _s, "visit_seq");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "self");
                        ::quote::__private::push_comma(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "mut");
                        ::quote::__private::push_ident(&mut _s, "__seq");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "__A");
                        _s
                    });
                ::quote::__private::push_rarrow(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::ToTokens::to_tokens(&private, &mut _s);
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Result");
                ::quote::__private::push_lt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Self");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Value");
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "Error");
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_ident(&mut _s, "where");
                ::quote::__private::push_ident(&mut _s, "__A");
                ::quote::__private::push_colon(&mut _s);
                ::quote::__private::push_ident(&mut _s, "_serde");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "de");
                ::quote::__private::push_colon2(&mut _s);
                ::quote::__private::push_ident(&mut _s, "SeqAccess");
                ::quote::__private::push_lt(&mut _s);
                ::quote::ToTokens::to_tokens(&delife, &mut _s);
                ::quote::__private::push_gt(&mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Brace,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "match");
                        ::quote::__private::push_ident(&mut _s, "_serde");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "de");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "SeqAccess");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "next_element");
                        ::quote::__private::push_group(&mut _s,
                            ::quote::__private::Delimiter::Parenthesis,
                            {
                                let mut _s = ::quote::__private::TokenStream::new();
                                ::quote::__private::push_and(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "mut");
                                ::quote::__private::push_ident(&mut _s, "__seq");
                                _s
                            });
                        ::quote::__private::push_group(&mut _s,
                            ::quote::__private::Delimiter::Brace,
                            {
                                let mut _s = ::quote::__private::TokenStream::new();
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Ok");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "Some");
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Parenthesis,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_ident(&mut _s, "__variant");
                                                _s
                                            });
                                        _s
                                    });
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Brace,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "match");
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "de");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "SeqAccess");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s,
                                            "next_element_seed");
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Parenthesis,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_and(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "mut");
                                                ::quote::__private::push_ident(&mut _s, "__seq");
                                                ::quote::__private::push_comma(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "__Seed");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "variant");
                                                        ::quote::__private::push_colon(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "__variant");
                                                        ::quote::__private::push_comma(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "marker");
                                                        ::quote::__private::push_colon(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                                                        ::quote::__private::push_comma(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "lifetime");
                                                        ::quote::__private::push_colon(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                                                        ::quote::__private::push_comma(&mut _s);
                                                        _s
                                                    });
                                                ::quote::__private::push_comma(&mut _s);
                                                _s
                                            });
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Brace,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Ok");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Some");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_ident(&mut _s, "__ret");
                                                                _s
                                                            });
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Ok");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "__ret");
                                                        _s
                                                    });
                                                ::quote::__private::push_comma(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Ok");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "None");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Brace,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                        ::quote::__private::push_colon2(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "Err");
                                                        ::quote::__private::push_group(&mut _s,
                                                            ::quote::__private::Delimiter::Parenthesis,
                                                            {
                                                                let mut _s = ::quote::__private::TokenStream::new();
                                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "de");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                                ::quote::__private::push_colon2(&mut _s);
                                                                ::quote::__private::push_ident(&mut _s, "invalid_length");
                                                                ::quote::__private::push_group(&mut _s,
                                                                    ::quote::__private::Delimiter::Parenthesis,
                                                                    {
                                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                                        ::quote::__private::parse(&mut _s, "1");
                                                                        ::quote::__private::push_comma(&mut _s);
                                                                        ::quote::__private::push_and(&mut _s);
                                                                        ::quote::__private::push_ident(&mut _s, "self");
                                                                        _s
                                                                    });
                                                                _s
                                                            });
                                                        _s
                                                    });
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Err");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "__err");
                                                        _s
                                                    });
                                                ::quote::__private::push_fat_arrow(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Err");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::push_ident(&mut _s, "__err");
                                                        _s
                                                    });
                                                ::quote::__private::push_comma(&mut _s);
                                                _s
                                            });
                                        _s
                                    });
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Ok");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "None");
                                        _s
                                    });
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Brace,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "_serde");
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                                        ::quote::__private::push_colon2(&mut _s);
                                        ::quote::__private::push_ident(&mut _s, "Err");
                                        ::quote::__private::push_group(&mut _s,
                                            ::quote::__private::Delimiter::Parenthesis,
                                            {
                                                let mut _s = ::quote::__private::TokenStream::new();
                                                ::quote::__private::push_ident(&mut _s, "_serde");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "de");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "Error");
                                                ::quote::__private::push_colon2(&mut _s);
                                                ::quote::__private::push_ident(&mut _s, "invalid_length");
                                                ::quote::__private::push_group(&mut _s,
                                                    ::quote::__private::Delimiter::Parenthesis,
                                                    {
                                                        let mut _s = ::quote::__private::TokenStream::new();
                                                        ::quote::__private::parse(&mut _s, "0");
                                                        ::quote::__private::push_comma(&mut _s);
                                                        ::quote::__private::push_and(&mut _s);
                                                        ::quote::__private::push_ident(&mut _s, "self");
                                                        _s
                                                    });
                                                _s
                                            });
                                        _s
                                    });
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Err");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "__err");
                                        _s
                                    });
                                ::quote::__private::push_fat_arrow(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "_serde");
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::ToTokens::to_tokens(&private, &mut _s);
                                ::quote::__private::push_colon2(&mut _s);
                                ::quote::__private::push_ident(&mut _s, "Err");
                                ::quote::__private::push_group(&mut _s,
                                    ::quote::__private::Delimiter::Parenthesis,
                                    {
                                        let mut _s = ::quote::__private::TokenStream::new();
                                        ::quote::__private::push_ident(&mut _s, "__err");
                                        _s
                                    });
                                ::quote::__private::push_comma(&mut _s);
                                _s
                            });
                        _s
                    });
                _s
            });
        ::quote::__private::push_pound(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "doc");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Parenthesis,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "hidden");
                        _s
                    });
                _s
            });
        ::quote::__private::push_ident(&mut _s, "const");
        ::quote::__private::push_ident(&mut _s, "FIELDS");
        ::quote::__private::push_colon(&mut _s);
        ::quote::__private::push_and(&mut _s);
        ::quote::__private::push_lifetime(&mut _s, "\'static");
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_and(&mut _s);
                ::quote::__private::push_lifetime(&mut _s, "\'static");
                ::quote::__private::push_ident(&mut _s, "str");
                _s
            });
        ::quote::__private::push_eq(&mut _s);
        ::quote::__private::push_and(&mut _s);
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Bracket,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::ToTokens::to_tokens(&tag, &mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::ToTokens::to_tokens(&content, &mut _s);
                _s
            });
        ::quote::__private::push_semi(&mut _s);
        ::quote::__private::push_ident(&mut _s, "_serde");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "Deserializer");
        ::quote::__private::push_colon2(&mut _s);
        ::quote::__private::push_ident(&mut _s, "deserialize_struct");
        ::quote::__private::push_group(&mut _s,
            ::quote::__private::Delimiter::Parenthesis,
            {
                let mut _s = ::quote::__private::TokenStream::new();
                ::quote::__private::push_ident(&mut _s, "__deserializer");
                ::quote::__private::push_comma(&mut _s);
                ::quote::ToTokens::to_tokens(&type_name, &mut _s);
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "FIELDS");
                ::quote::__private::push_comma(&mut _s);
                ::quote::__private::push_ident(&mut _s, "__Visitor");
                ::quote::__private::push_group(&mut _s,
                    ::quote::__private::Delimiter::Brace,
                    {
                        let mut _s = ::quote::__private::TokenStream::new();
                        ::quote::__private::push_ident(&mut _s, "marker");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "_serde");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_lt(&mut _s);
                        ::quote::ToTokens::to_tokens(&this_type, &mut _s);
                        ::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
                        ::quote::__private::push_gt(&mut _s);
                        ::quote::__private::push_comma(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "lifetime");
                        ::quote::__private::push_colon(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "_serde");
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::ToTokens::to_tokens(&private, &mut _s);
                        ::quote::__private::push_colon2(&mut _s);
                        ::quote::__private::push_ident(&mut _s, "PhantomData");
                        ::quote::__private::push_comma(&mut _s);
                        _s
                    });
                ::quote::__private::push_comma(&mut _s);
                _s
            });
        _s
    });quote_block! {
182        #variant_visitor
183
184        #variants_stmt
185
186        #[doc(hidden)]
187        struct __Seed #de_impl_generics #where_clause {
188            variant: __Field,
189            marker: _serde::#private::PhantomData<#this_type #ty_generics>,
190            lifetime: _serde::#private::PhantomData<&#delife ()>,
191        }
192
193        #[automatically_derived]
194        impl #de_impl_generics _serde::de::DeserializeSeed<#delife> for __Seed #de_ty_generics #where_clause {
195            type Value = #this_type #ty_generics;
196
197            fn deserialize<__D>(self, __deserializer: __D) -> _serde::#private::Result<Self::Value, __D::Error>
198            where
199                __D: _serde::Deserializer<#delife>,
200            {
201                match self.variant {
202                    #(#variant_arms)*
203                }
204            }
205        }
206
207        #[doc(hidden)]
208        struct __Visitor #de_impl_generics #where_clause {
209            marker: _serde::#private::PhantomData<#this_type #ty_generics>,
210            lifetime: _serde::#private::PhantomData<&#delife ()>,
211        }
212
213        #[automatically_derived]
214        impl #de_impl_generics _serde::de::Visitor<#delife> for __Visitor #de_ty_generics #where_clause {
215            type Value = #this_type #ty_generics;
216
217            fn expecting(&self, __formatter: &mut _serde::#private::Formatter) -> _serde::#private::fmt::Result {
218                _serde::#private::Formatter::write_str(__formatter, #expecting)
219            }
220
221            fn visit_map<__A>(self, mut __map: __A) -> _serde::#private::Result<Self::Value, __A::Error>
222            where
223                __A: _serde::de::MapAccess<#delife>,
224            {
225                // Visit the first relevant key.
226                match #next_relevant_key {
227                    // First key is the tag.
228                    _serde::#private::Some(_serde::#private::de::TagOrContentField::Tag) => {
229                        // Parse the tag.
230                        let __field = #variant_from_map;
231                        // Visit the second key.
232                        match #next_relevant_key {
233                            // Second key is a duplicate of the tag.
234                            _serde::#private::Some(_serde::#private::de::TagOrContentField::Tag) => {
235                                _serde::#private::Err(<__A::Error as _serde::de::Error>::duplicate_field(#tag))
236                            }
237                            // Second key is the content.
238                            _serde::#private::Some(_serde::#private::de::TagOrContentField::Content) => {
239                                let __ret = _serde::de::MapAccess::next_value_seed(&mut __map,
240                                    __Seed {
241                                        variant: __field,
242                                        marker: _serde::#private::PhantomData,
243                                        lifetime: _serde::#private::PhantomData,
244                                    })?;
245                                // Visit remaining keys, looking for duplicates.
246                                #visit_remaining_keys
247                            }
248                            // There is no second key; might be okay if the we have a unit variant.
249                            _serde::#private::None => #missing_content
250                        }
251                    }
252                    // First key is the content.
253                    _serde::#private::Some(_serde::#private::de::TagOrContentField::Content) => {
254                        // Buffer up the content.
255                        let __content = _serde::de::MapAccess::next_value_seed(&mut __map, _serde::#private::de::ContentVisitor::new())?;
256                        // Visit the second key.
257                        match #next_relevant_key {
258                            // Second key is the tag.
259                            _serde::#private::Some(_serde::#private::de::TagOrContentField::Tag) => {
260                                #finish_content_then_tag
261                            }
262                            // Second key is a duplicate of the content.
263                            _serde::#private::Some(_serde::#private::de::TagOrContentField::Content) => {
264                                _serde::#private::Err(<__A::Error as _serde::de::Error>::duplicate_field(#content))
265                            }
266                            // There is no second key.
267                            _serde::#private::None => {
268                                _serde::#private::Err(<__A::Error as _serde::de::Error>::missing_field(#tag))
269                            }
270                        }
271                    }
272                    // There is no first key.
273                    _serde::#private::None => {
274                        _serde::#private::Err(<__A::Error as _serde::de::Error>::missing_field(#tag))
275                    }
276                }
277            }
278
279            fn visit_seq<__A>(self, mut __seq: __A) -> _serde::#private::Result<Self::Value, __A::Error>
280            where
281                __A: _serde::de::SeqAccess<#delife>,
282            {
283                // Visit the first element - the tag.
284                match _serde::de::SeqAccess::next_element(&mut __seq) {
285                    _serde::#private::Ok(_serde::#private::Some(__variant)) => {
286                        // Visit the second element - the content.
287                        match _serde::de::SeqAccess::next_element_seed(
288                            &mut __seq,
289                            __Seed {
290                                variant: __variant,
291                                marker: _serde::#private::PhantomData,
292                                lifetime: _serde::#private::PhantomData,
293                            },
294                        ) {
295                            _serde::#private::Ok(_serde::#private::Some(__ret)) => _serde::#private::Ok(__ret),
296                            // There is no second element.
297                            _serde::#private::Ok(_serde::#private::None) => {
298                                _serde::#private::Err(_serde::de::Error::invalid_length(1, &self))
299                            }
300                            _serde::#private::Err(__err) => _serde::#private::Err(__err),
301                        }
302                    }
303                    // There is no first element.
304                    _serde::#private::Ok(_serde::#private::None) => {
305                        _serde::#private::Err(_serde::de::Error::invalid_length(0, &self))
306                    }
307                    _serde::#private::Err(__err) => _serde::#private::Err(__err),
308                }
309            }
310        }
311
312        #[doc(hidden)]
313        const FIELDS: &'static [&'static str] = &[#tag, #content];
314        _serde::Deserializer::deserialize_struct(
315            __deserializer,
316            #type_name,
317            FIELDS,
318            __Visitor {
319                marker: _serde::#private::PhantomData::<#this_type #ty_generics>,
320                lifetime: _serde::#private::PhantomData,
321            },
322        )
323    }
324}