{"record":{"id":"d25cff59a6c66898","repo":"bevyengine/bevy","slug":"relationshiptarget-can-only-be-derived-for-structs","errorCode":null,"errorMessage":"RelationshipTarget can only be derived for structs.","messagePattern":"RelationshipTarget can only be derived for structs\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/bevy_ecs/macro_logic/src/component.rs","lineNumber":471,"sourceCode":"        }))\n    }\n\n    fn derive_relationship_target(\n        &self,\n        ast: &DeriveInput,\n        bevy_ecs: &Path,\n    ) -> Result<Option<TokenStream>> {\n        let Some(relationship_target) = &self.relationship_target else {\n            return Ok(None);\n        };\n\n        let Data::Struct(DataStruct {\n            fields,\n            struct_token,\n            ..\n        }) = &ast.data\n        else {\n            return Err(syn::Error::new(\n                ast.span(),\n                \"RelationshipTarget can only be derived for structs.\",\n            ));\n        };\n        let field = relationship_field(fields, \"RelationshipTarget\", struct_token.span())?;\n\n        if field.vis != Visibility::Inherited {\n            return Err(syn::Error::new(field.span(), \"The collection in RelationshipTarget must be private to prevent users from directly mutating it, which could invalidate the correctness of relationships.\"));\n        }\n        let collection = &field.ty;\n        let relationship_member = field.ident.clone().map_or(Member::from(0), Member::Named);\n\n        let members = fields\n            .members()\n            .filter(|member| member != &relationship_member);\n\n        let relationship = &relationship_target.relationship;\n        let struct_name = &ast.ident;","sourceCodeStart":453,"sourceCodeEnd":489,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_ecs/macro_logic/src/component.rs#L453-L489","documentation":"Compile-time error from derive_relationship_target: #[derive(RelationshipTarget)] was applied to an enum or union rather than a struct; the target derive needs a named struct field holding the linked-entity collection.","triggerScenarios":"Thrown at crates/bevy_ecs/macro_logic/src/component.rs:471 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Apply #[derive(RelationshipTarget)] only to structs","Wrap the collection in a newtype struct and derive on it"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","contentChangedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}