{"record":{"id":"9c772148d47551fe","repo":"slint-ui/slint","slug":"the-structure-does-not-ends-in-vtable","errorCode":null,"errorMessage":"The structure does not ends in 'VTable'","messagePattern":"The structure does not ends in 'VTable'","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"helper_crates/vtable/macro/macro.rs","lineNumber":183,"sourceCode":"*/\n#[proc_macro_attribute]\npub fn vtable(_attr: TokenStream, item: TokenStream) -> TokenStream {\n    let mut input = parse_macro_input!(item as ItemStruct);\n\n    let fields = if let Fields::Named(fields) = &mut input.fields {\n        fields\n    } else {\n        return Error::new(\n            proc_macro2::Span::call_site(),\n            \"Only supported for structure with named fields\",\n        )\n        .to_compile_error()\n        .into();\n    };\n\n    let vtable_name = input.ident.to_string();\n    if !vtable_name.ends_with(\"VTable\") {\n        return Error::new(input.ident.span(), \"The structure does not ends in 'VTable'\")\n            .to_compile_error()\n            .into();\n    }\n\n    let trait_name = Ident::new(&vtable_name[..vtable_name.len() - 6], input.ident.span());\n    let to_name = quote::format_ident!(\"{}TO\", trait_name);\n    let module_name = quote::format_ident!(\"{}_vtable_mod\", trait_name);\n    let static_vtable_macro_name = quote::format_ident!(\"{}_static\", vtable_name);\n\n    let vtable_name = input.ident.clone();\n\n    let mut drop_impls = Vec::new();\n\n    let mut generated_trait = ItemTrait {\n        attrs: input\n            .attrs\n            .iter()\n            .filter(|a| a.path().get_ident().as_ref().map(|i| *i == \"doc\").unwrap_or(false))","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/slint-ui/slint/blob/3fd8f2ec03c2aa8a95d5f4b9daa299c7b8bf4016/helper_crates/vtable/macro/macro.rs#L165-L201","documentation":"Error \"The structure does not ends in 'VTable'\" thrown in slint-ui/slint.","triggerScenarios":"Thrown at helper_crates/vtable/macro/macro.rs:183 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Name the struct with a 'VTable' suffix as required by the macro convention.","Rename the struct to end in VTable."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3fd8f2ec03c2aa8a95d5f4b9daa299c7b8bf4016","analyzedAt":"2026-08-19T23:23:16.610Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}