bevyengine/bevy · error
{deref_kind} cannot be derived on field-less structs
Error message
{deref_kind} cannot be derived on field-less structs What it means
Compile-time syn error from get_deref_field: the derive input for #[derive(Deref)]/#[derive(DerefMut)] is a struct with no fields, so there is no field to dereference to. The derive macro requires exactly one target field (named or tuple field) to implement Deref/DerefMut.
Source
Thrown at crates/bevy_derive/src/derefs.rs:58
}
};
let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
TokenStream::from(quote! {
impl #impl_generics ::core::ops::DerefMut for #ident #ty_generics #where_clause {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.#field_member
}
}
})
}
fn get_deref_field(ast: &DeriveInput, is_mut: bool) -> syn::Result<(Member, &Type)> {
let deref_kind = if is_mut { DEREF_MUT } else { DEREF };
let deref_attr_str = format!("`#[{DEREF_ATTR}]`");
match &ast.data {
Data::Struct(data_struct) if data_struct.fields.is_empty() => Err(syn::Error::new(
Span::call_site().into(),
format!("{deref_kind} cannot be derived on field-less structs"),
)),
Data::Struct(data_struct) if data_struct.fields.len() == 1 => {
let field = data_struct.fields.iter().next().unwrap();
let member = to_member(field, 0);
Ok((member, &field.ty))
}
Data::Struct(data_struct) => {
let mut selected_field: Option<(Member, &Type)> = None;
for (index, field) in data_struct.fields.iter().enumerate() {
for attr in &field.attrs {
if !attr.meta.path().is_ident(DEREF_ATTR) {
continue;
}
attr.meta.require_path_only()?;
View on GitHub (pinned to 396ca72708)
Solutions
- Add a field to the struct for the deref target
- Remove the derive from field-less marker types
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/bevy_derive/src/derefs.rs:58 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/718ed2cda6464baa.
Report an issue: GitHub.