DioxusLabs/dioxus · error · syn::Error
Enums must be repr(C, u*)
Error message
Enums must be repr(C, u*)
What it means
Compile-time check in derive_parse: an enum with fielded variants was annotated without `#[repr(C, ...)]` (repr_c is false while variants_have_fields is true). Const serialization requires a C layout with a u* discriminant to reason about memory layout; the faulting input is the enum's repr attribute.
Solutions
- Mark the enum with a combined C and integer repr, e.g. #[repr(C, u8)].
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/const-serialize-macro/src/lib.rs:150 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of DioxusLabs/dioxus@24f6a829df (2026-08-23).
Data as JSON: /api/errors/fe25fac7a77db597.
Report an issue: GitHub.
Appendix: source
Thrown at packages/const-serialize-macro/src/lib.rs:150
// #[repr(u64)]
if meta.path.is_ident("u64") {
discriminant_size = Some(4);
return Ok(());
}
Err(meta.error("unrecognized repr"))
})
{
return err.to_compile_error().into();
}
}
let variants_have_fields = data
.variants
.iter()
.any(|variant| !variant.fields.is_empty());
if !repr_c && variants_have_fields {
return syn::Error::new(input.ident.span(), "Enums must be repr(C, u*)")
.to_compile_error()
.into();
}
if discriminant_size.is_none() {
return syn::Error::new(input.ident.span(), "Enums must be repr(u*)")
.to_compile_error()
.into();
}
let ty = &input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
let mut where_clause = where_clause.cloned();
add_bounds(&mut where_clause, &input.generics, &krate);
let mut last_discriminant = None;
let variants = data.variants.iter().map(|variant| {
let discriminant = variant
.discriminantView on GitHub (pinned to 24f6a829df)