pyo3_stub_gen/generate/
enum_.rs1use crate::{generate::*, type_info::*};
2use std::fmt;
3
4#[derive(Debug, Clone, PartialEq)]
6pub struct EnumDef {
7 pub name: &'static str,
8 pub doc: &'static str,
9 pub variants: &'static [(&'static str, &'static str)],
10 pub methods: Vec<MethodDef>,
11 pub attrs: Vec<MemberDef>,
12 pub getters: Vec<MemberDef>,
13 pub setters: Vec<MemberDef>,
14}
15
16impl From<&PyEnumInfo> for EnumDef {
17 fn from(info: &PyEnumInfo) -> Self {
18 Self {
19 name: info.pyclass_name,
20 doc: info.doc,
21 variants: info.variants,
22 methods: Vec::new(),
23 attrs: Vec::new(),
24 getters: Vec::new(),
25 setters: Vec::new(),
26 }
27 }
28}
29
30impl fmt::Display for EnumDef {
31 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32 writeln!(f, "class {}(Enum):", self.name)?;
33 let indent = indent();
34 docstring::write_docstring(f, self.doc, indent)?;
35 for (variant, variant_doc) in self.variants {
36 writeln!(f, "{indent}{variant} = ...")?;
37 docstring::write_docstring(f, variant_doc, indent)?;
38 }
39 if !(self.attrs.is_empty()
40 && self.getters.is_empty()
41 && self.setters.is_empty()
42 && self.methods.is_empty())
43 {
44 writeln!(f)?;
45 for attr in &self.attrs {
46 attr.fmt(f)?;
47 }
48 for getter in &self.getters {
49 GetterDisplay(getter).fmt(f)?;
50 }
51 for setter in &self.setters {
52 SetterDisplay(setter).fmt(f)?;
53 }
54 for methods in &self.methods {
55 methods.fmt(f)?;
56 }
57 }
58 writeln!(f)?;
59 Ok(())
60 }
61}