slint-ui/slint · error · syn::Error

The structure does not ends in 'VTable'

Error message

The structure does not ends in 'VTable'

What it means

Error "The structure does not ends in 'VTable'" thrown in slint-ui/slint.

Source

Thrown at helper_crates/vtable/macro/macro.rs:183

*/
#[proc_macro_attribute]
pub fn vtable(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let mut input = parse_macro_input!(item as ItemStruct);

    let fields = if let Fields::Named(fields) = &mut input.fields {
        fields
    } else {
        return Error::new(
            proc_macro2::Span::call_site(),
            "Only supported for structure with named fields",
        )
        .to_compile_error()
        .into();
    };

    let vtable_name = input.ident.to_string();
    if !vtable_name.ends_with("VTable") {
        return Error::new(input.ident.span(), "The structure does not ends in 'VTable'")
            .to_compile_error()
            .into();
    }

    let trait_name = Ident::new(&vtable_name[..vtable_name.len() - 6], input.ident.span());
    let to_name = quote::format_ident!("{}TO", trait_name);
    let module_name = quote::format_ident!("{}_vtable_mod", trait_name);
    let static_vtable_macro_name = quote::format_ident!("{}_static", vtable_name);

    let vtable_name = input.ident.clone();

    let mut drop_impls = Vec::new();

    let mut generated_trait = ItemTrait {
        attrs: input
            .attrs
            .iter()
            .filter(|a| a.path().get_ident().as_ref().map(|i| *i == "doc").unwrap_or(false))

View on GitHub (pinned to 3fd8f2ec03)

Solutions

  1. Name the struct with a 'VTable' suffix as required by the macro convention.
  2. Rename the struct to end in VTable.

When it happens

Trigger: Thrown at helper_crates/vtable/macro/macro.rs:183 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of slint-ui/slint@3fd8f2ec03 (2026-08-19). Data as JSON: /api/errors/9c772148d47551fe. Report an issue: GitHub.