in serde-generate/src/python3.rs [274:319]
fn output_enum_container(
&mut self,
name: &str,
variants: &BTreeMap<u32, Named<VariantFormat>>,
) -> Result<()> {
writeln!(self.out, "\nclass {}:", name)?;
self.out.indent();
self.output_comment(name)?;
self.current_namespace.push(name.to_string());
if self.generator.config.serialization {
writeln!(
self.out,
"VARIANTS = [] # type: typing.Sequence[typing.Type[{}]]",
name
)?;
for encoding in &self.generator.config.encodings {
self.output_serialize_method_for_encoding(name, *encoding)?;
self.output_deserialize_method_for_encoding(name, *encoding)?;
}
}
let wrote_custom_code = self.output_custom_code()?;
if !self.generator.config.serialization && !wrote_custom_code {
writeln!(self.out, "pass")?;
}
writeln!(self.out)?;
self.out.unindent();
for (index, variant) in variants {
self.output_variant(name, &variant.name, *index, &variant.value)?;
}
self.current_namespace.pop();
if self.generator.config.serialization {
writeln!(
self.out,
"{}.VARIANTS = [\n{}]\n",
name,
variants
.iter()
.map(|(_, v)| format!(" {}__{},\n", name, v.name))
.collect::<Vec<_>>()
.join("")
)?;
}
Ok(())
}