pyo3_stub_gen/generate/
variant_methods.rs1use indexmap::IndexMap;
2
3use crate::generate::{Arg, MethodDef, MethodType};
4use crate::type_info::{PyComplexEnumInfo, VariantForm, VariantInfo};
5use crate::TypeInfo;
6use std::collections::HashSet;
7
8pub(super) fn get_variant_methods(
9 enum_info: &PyComplexEnumInfo,
10 info: &VariantInfo,
11) -> IndexMap<String, Vec<MethodDef>> {
12 let full_class_name = format!("{}.{}", enum_info.pyclass_name, info.pyclass_name);
13
14 let mut methods: IndexMap<String, Vec<MethodDef>> = IndexMap::new();
15
16 methods
17 .entry("__new__".to_string())
18 .or_default()
19 .push(MethodDef {
20 name: "__new__",
21 args: info.constr_args.iter().map(|a| a.into()).collect(),
22 r#return: TypeInfo {
23 name: full_class_name,
24 import: HashSet::new(),
25 },
26 doc: "",
27 r#type: MethodType::New,
28 is_async: false,
29 deprecated: None,
30 type_ignored: None,
31 });
32
33 if let VariantForm::Tuple = info.form {
34 let len_name = "__len__";
35 methods
36 .entry(len_name.to_string())
37 .or_default()
38 .push(MethodDef {
39 name: len_name,
40 args: Vec::new(),
41 r#return: TypeInfo::builtin("int"),
42 doc: "",
43 r#type: MethodType::Instance,
44 is_async: false,
45 deprecated: None,
46 type_ignored: None,
47 });
48
49 let getitem_name = "__getitem__";
50 methods
51 .entry(getitem_name.to_string())
52 .or_default()
53 .push(MethodDef {
54 name: getitem_name,
55 args: vec![Arg {
56 name: "key",
57 r#type: TypeInfo::builtin("int"),
58 signature: None,
59 }],
60 r#return: TypeInfo::any(),
61 doc: "",
62 r#type: MethodType::Instance,
63 is_async: false,
64 deprecated: None,
65 type_ignored: None,
66 });
67 }
68
69 methods
70}