in serde-generate/src/python3.rs [233:272]
fn output_variant(
&mut self,
base: &str,
name: &str,
index: u32,
variant: &VariantFormat,
) -> Result<()> {
use VariantFormat::*;
let fields = match variant {
Unit => Vec::new(),
NewType(format) => vec![Named {
name: "value".to_string(),
value: format.as_ref().clone(),
}],
Tuple(formats) => vec![Named {
name: "value".to_string(),
value: Format::Tuple(formats.clone()),
}],
Struct(fields) => fields.clone(),
Variable(_) => panic!("incorrect value"),
};
// Regarding comments, we pretend the namespace is `[module, base, name]`.
writeln!(
self.out,
"\n@dataclass(frozen=True)\nclass {0}__{1}({0}):",
base, name
)?;
self.out.indent();
self.output_comment(name)?;
if self.generator.config.serialization {
writeln!(self.out, "INDEX = {} # type: int", index)?;
}
self.current_namespace.push(name.to_string());
self.output_fields(&fields)?;
self.output_custom_code()?;
self.current_namespace.pop();
self.out.unindent();
writeln!(self.out)
}