bevyengine/bevy · error
Relationship can only be derived for structs.
Error message
Relationship can only be derived for structs.
What it means
Compile-time error from derive_relationship: #[derive(Relationship)] was applied to an enum or union. Relationship derives forward to a contained relationship field, so only structs are supported.
Source
Thrown at crates/bevy_ecs/macro_logic/src/component.rs:410
#relationship_target
})
}
fn derive_relationship(
&self,
ast: &DeriveInput,
bevy_ecs: &Path,
) -> Result<Option<TokenStream>> {
let Some(relationship) = &self.relationship else {
return Ok(None);
};
let Data::Struct(DataStruct {
fields,
struct_token,
..
}) = &ast.data
else {
return Err(syn::Error::new(
ast.span(),
"Relationship can only be derived for structs.",
));
};
let field = relationship_field(fields, "Relationship", struct_token.span())?;
let relationship_member = field.ident.clone().map_or(Member::from(0), Member::Named);
let members = fields
.members()
.filter(|member| member != &relationship_member);
let struct_name = &ast.ident;
let (impl_generics, type_generics, where_clause) = &ast.generics.split_for_impl();
let relationship_target = &relationship.relationship_target;
let allow_self_referential = relationship.allow_self_referential;
let fqdefault = FQDefault.into_token_stream();View on GitHub (pinned to 396ca72708)
Solutions
- Apply #[derive(Relationship)] only to structs
- Restructure the enum as a struct containing the relationship component
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/bevy_ecs/macro_logic/src/component.rs:410 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/879a1fbf18a87d94.
Report an issue: GitHub.