From 80d8e1a7cbeba26378d34b1141c5fe39758dfe33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Fri, 10 Jun 2022 16:17:24 +0200 Subject: [PATCH] Extract the attribute names --- pyo3-macros-backend/src/pyimpl.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pyo3-macros-backend/src/pyimpl.rs b/pyo3-macros-backend/src/pyimpl.rs index 24c323fe0f9..77d4e0100ac 100644 --- a/pyo3-macros-backend/src/pyimpl.rs +++ b/pyo3-macros-backend/src/pyimpl.rs @@ -9,7 +9,7 @@ use crate::{ pymethod::{self, is_proto_method}, utils::get_pyo3_crate, }; -use proc_macro2::{Ident, TokenStream}; +use proc_macro2::{Ident, Literal, TokenStream}; use pymethod::GeneratedPyMethod; use quote::{format_ident, quote}; use syn::{parse::{Parse, ParseStream}, spanned::Spanned, Result, Type}; @@ -279,14 +279,17 @@ fn get_cfg_attributes(attrs: &[syn::Attribute]) -> Vec<&syn::Attribute> { } fn generate_impl_info(cls: &Type, fields: Vec) -> TokenStream { - println!("Generating impl {:?}", cls); - let ident_prefix = generate_unique_ident(cls, None); let fields_info = format_ident!("{}_fields_info", ident_prefix); + let field_size = Literal::usize_suffixed(fields.len()); + + let fields = fields.iter() + .map(|field| quote!(&#field)); + quote! { - const #fields_info: [&'static pyo3::interface::FieldInfo; 0] = [ - //TODO + const #fields_info: [&'static pyo3::interface::FieldInfo; #field_size] = [ + #(#fields),* ]; impl pyo3::interface::GetClassFields for #cls {