in serde-generate/src/golang.rs [913:961]
fn output_container(&mut self, name: &str, format: &ContainerFormat) -> Result<()> {
use ContainerFormat::*;
let fields = match format {
UnitStruct => Vec::new(),
NewTypeStruct(format) => match format.as_ref() {
// See comment in `output_variant`.
Format::TypeName(_) | Format::Option(_) => vec![Named {
name: "Value".to_string(),
value: format.as_ref().clone(),
}],
_ => {
self.output_struct_or_variant_new_type_container(None, None, name, format)?;
return Ok(());
}
},
TupleStruct(formats) => formats
.iter()
.enumerate()
.map(|(i, f)| Named {
name: format!("Field{}", i),
value: f.clone(),
})
.collect(),
Struct(fields) => fields
.iter()
.map(|f| Named {
name: f.name.to_camel_case(),
value: f.value.clone(),
})
.collect(),
Enum(variants) => {
let variants = variants
.iter()
.map(|(i, f)| {
(
*i,
Named {
name: f.name.to_camel_case(),
value: f.value.clone(),
},
)
})
.collect();
self.output_enum_container(name, &variants)?;
return Ok(());
}
};
self.output_struct_or_variant_container(None, None, name, &fields)
}