bevyengine/bevy · error

Deriving Template for enums requires picking a default varia

Error message

Deriving Template for enums requires picking a default variant using #[default]

What it means

Compile error from derive_from_template: after processing all enum variants, no variant carried the #[default] attribute, so variant_default_ident stayed None. Template derives require an explicit default variant for enums; this sentinel reports the missing designation.

Source

Thrown at crates/bevy_ecs/macros/src/template.rs:270

                            quote! {#template_ident::#variant_ident => #template_ident::#variant_ident},
                        );
                        if is_default {
                            variant_default_ident = Some(quote! {
                                Self::#variant_ident
                            });
                        }
                        variant_defaults.push(quote! {
                            /// Default value for this variant, generated by a `FromTemplate` derive.
                            #type_visibility fn #variant_default_name() -> Self {
                                Self::#variant_ident
                            }
                        });
                    }
                }
            }

            if variant_default_ident.is_none() {
                panic!("Deriving Template for enums requires picking a default variant using #[default]");
            }

            quote! {
                #[allow(missing_docs)]
                #type_visibility enum #template_ident #type_generics #where_clause {
                    #(#variant_definitions,)*
                }

                impl #impl_generics #template_ident #type_generics #where_clause {
                    #(#variant_defaults)*
                }

                impl #impl_generics #bevy_ecs::template::Template for #template_ident #type_generics #where_clause {
                    type Output = #type_ident #type_generics;
                    fn build_template(&self, context: &mut #bevy_ecs::template::TemplateContext) -> #bevy_ecs::error::Result<Self::Output> {
                        #bevy_ecs::error::Result::Ok(match self {
                            #(#variant_builds,)*
                        })

View on GitHub (pinned to 396ca72708)

Solutions

  1. Add #[default] to the desired enum variant
  2. Convert to a struct if a single Template shape suffices
  3. Implement Default/FromTemplate manually instead of deriving
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/bevy_ecs/macros/src/template.rs:270 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20). Data as JSON: /api/errors/04628d84caecd9c8. Report an issue: GitHub.