usecrate::de::enum_adjacently; usecrate::de::enum_externally; usecrate::de::enum_internally; usecrate::de::enum_untagged; usecrate::de::identifier; usecrate::de::{field_i, FieldWithAliases, Parameters}; usecrate::fragment::{Expr, Fragment, Stmts}; usecrate::internals::ast::Variant; usecrate::internals::attr; usecrate::private; use proc_macro2::TokenStream; use quote::quote;
/// Generates `Deserialize::deserialize` body for an `enum Enum {...}` pub(super) fn deserialize(
params: &Parameters,
variants: &[Variant],
cattrs: &attr::Container,
) -> Fragment { // The variants have already been checked (in ast.rs) that all untagged variants appear at the end match variants.iter().position(|var| var.attrs.untagged()) {
Some(variant_idx) => { let (tagged, untagged) = variants.split_at(variant_idx); let tagged_frag = Expr(deserialize_homogeneous_enum(params, tagged, cattrs)); // Ignore any error associated with non-untagged deserialization so that we // can fall through to the untagged variants. This may be infallible so we // need to provide the error type. let first_attempt = quote! { iflet _serde::#private::Result::<_, __D::Error>::Ok(__ok) = (|| #tagged_frag)() { return _serde::#private::Ok(__ok);
}
};
enum_untagged::deserialize(params, untagged, cattrs, Some(first_attempt))
}
None => deserialize_homogeneous_enum(params, variants, cattrs),
}
}
let variant_visitor = Stmts(identifier::deserialize_generated(
&deserialized_variants, false, // variant identifiers do not depend on the presence of flatten fields true,
None,
fallthrough,
));
(variants_stmt, variant_visitor)
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.