diesel-rs/diesel · error
Only enums with one field per variant are supported
Error message
Only enums with one field per variant are supported
What it means
The MultiConnection derive only accepts enum variants that wrap exactly one connection type as a single unnamed field. The offending input is the variant shape — a unit variant, named fields, or multiple fields were supplied instead.
Solutions
- Define every variant as a single-field tuple variant
- Do not use struct variants or unit variants for backends
- Keep one connection type per variant
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at diesel_derives/src/multiconnection.rs:20 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of diesel-rs/diesel@6fa6ed01b2 (2026-09-07).
Data as JSON: /api/errors/bcce59da75d8375d.
Report an issue: GitHub.
Appendix: source
Thrown at diesel_derives/src/multiconnection.rs:20
use syn::DeriveInput;
struct ConnectionVariant<'a> {
ty: &'a syn::Type,
name: &'a syn::Ident,
}
pub fn derive(item: DeriveInput) -> TokenStream {
let helper = MultiHelper::from_derive_input(&item);
if let syn::Data::Enum(e) = item.data {
let connection_types = e
.variants
.iter()
.map(|v| match &v.fields {
syn::Fields::Unnamed(f) if f.unnamed.len() == 1 => ConnectionVariant {
ty: &f.unnamed.first().unwrap().ty,
name: &v.ident,
},
_ => panic!("Only enums with one field per variant are supported"),
})
.collect::<Vec<_>>();
let backend = generate_backend(&connection_types, &helper);
let query_builder = generate_querybuilder(&connection_types, &helper);
let bind_collector = generate_bind_collector(&connection_types, &helper);
let row = generate_row(&connection_types, &helper);
let connection = generate_connection_impl(&connection_types, &item.ident, &helper);
quote::quote! {
mod multi_connection_impl {
use super::*;
mod backend {
use super::*;
#backend
}
mod query_builder {View on GitHub (pinned to 6fa6ed01b2)