pyo3_stub_gen/generate/
enum_.rs

1use crate::{generate::*, type_info::*};
2use std::fmt;
3
4/// Definition of a Python enum.
5#[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 members: Vec<MemberDef>,
12}
13
14impl From<&PyEnumInfo> for EnumDef {
15    fn from(info: &PyEnumInfo) -> Self {
16        Self {
17            name: info.pyclass_name,
18            doc: info.doc,
19            variants: info.variants,
20            methods: Vec::new(),
21            members: Vec::new(),
22        }
23    }
24}
25
26impl fmt::Display for EnumDef {
27    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
28        writeln!(f, "class {}(Enum):", self.name)?;
29        let indent = indent();
30        docstring::write_docstring(f, self.doc, indent)?;
31        for (variant, variant_doc) in self.variants {
32            writeln!(f, "{indent}{} = ...", variant)?;
33            docstring::write_docstring(f, variant_doc, indent)?;
34        }
35        for member in &self.members {
36            writeln!(f)?;
37            member.fmt(f)?;
38        }
39        for methods in &self.methods {
40            writeln!(f)?;
41            methods.fmt(f)?;
42        }
43        writeln!(f)?;
44        Ok(())
45    }
46}