{"record":{"id":"299e4cddf6dd5599","repo":"diesel-rs/diesel","slug":"foreign-derive-can-only-be-used-with-structs","errorCode":null,"errorMessage":"foreign_derive can only be used with structs","messagePattern":"foreign_derive can only be used with structs","errorType":"exception","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"diesel_derives/src/util.rs","lineNumber":71,"sourceCode":"                }\n                _ => None,\n            }\n        }\n        _ => None,\n    }\n}\n\npub fn ty_for_foreign_derive(item: &DeriveInput, model: &Model) -> Result<Type> {\n    if model.foreign_derive {\n        match item.data {\n            Data::Struct(ref body) => match body.fields.iter().next() {\n                Some(field) => Ok(field.ty.clone()),\n                None => Err(syn::Error::new(\n                    proc_macro2::Span::mixed_site(),\n                    \"foreign_derive requires at least one field\",\n                )),\n            },\n            _ => Err(syn::Error::new(\n                proc_macro2::Span::mixed_site(),\n                \"foreign_derive can only be used with structs\",\n            )),\n        }\n    } else {\n        let ident = &item.ident;\n        let (_, ty_generics, ..) = item.generics.split_for_impl();\n        Ok(parse_quote!(#ident #ty_generics))\n    }\n}\n\npub fn camel_to_snake(name: &str) -> String {\n    let mut result = String::with_capacity(name.len());\n    result.push_str(&name[..1].to_lowercase());\n    for character in name[1..].chars() {\n        if character.is_uppercase() {\n            result.push('_');\n            for lowercase in character.to_lowercase() {","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/diesel-rs/diesel/blob/6fa6ed01b24b24248ab2a611698d0a7c6a2e9120/diesel_derives/src/util.rs#L53-L89","documentation":"Compile-time error from ty_for_foreign_derive, used by derives on models marked #[foreign_derive]. The foreign-derive path only supports struct items (it takes the first field's type as the mapped type); when the annotated item is an enum or union, this guard fires. Fix: apply the derive to a struct, or drop #[foreign_derive].","triggerScenarios":"Thrown at diesel_derives/src/util.rs:71 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a struct with the foreign type as a field","Remove foreign_derive from non-struct items"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6fa6ed01b24b24248ab2a611698d0a7c6a2e9120","analyzedAt":"2026-09-07T01:50:13.074Z","contentChangedAt":"2026-09-07T01:50:13.074Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}