Skip to content

Commit 8125521

Browse files
committed
Extract the function kind
1 parent 56b85cf commit 8125521

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

pyo3-macros-backend/src/pymethod.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1249,13 +1249,23 @@ fn generate_get_field_info(cls: &syn::Type, field: &PyMethod<'_>) -> (TokenStrea
12491249
let field_args_name = format_ident!("{}_args", ident_prefix);
12501250

12511251
let field_name = TokenTree::Literal(Literal::string(&*field.method_name));
1252+
let field_kind = match &field.spec.tp {
1253+
FnType::Getter(_) => quote!(pyo3::interface::FieldKind::Getter),
1254+
FnType::Setter(_) => quote!(pyo3::interface::FieldKind::Setter),
1255+
FnType::Fn(_) => quote!(pyo3::interface::FieldKind::Function),
1256+
FnType::FnNew => quote!(pyo3::interface::FieldKind::New),
1257+
FnType::FnClass => quote!(pyo3::interface::FieldKind::ClassMethod),
1258+
FnType::FnStatic => quote!(pyo3::interface::FieldKind::StaticMethod),
1259+
FnType::FnModule => todo!("FnModule is not currently supported"),
1260+
FnType::ClassAttribute => quote!(pyo3::interface::FieldKind::ClassAttribute),
1261+
};
12521262

12531263
let output = quote! {
12541264
const #field_args_name: [pyo3::interface::ArgumentInfo; 0] = []; //TODO
12551265

12561266
const #field_info_name: pyo3::interface::FieldInfo = pyo3::interface::FieldInfo {
12571267
name: #field_name,
1258-
kind: pyo3::interface::FieldKind::New, //TODO
1268+
kind: #field_kind,
12591269
py_type: None, //TODO
12601270
arguments: &#field_args_name,
12611271
};

0 commit comments

Comments
 (0)