in serde-generate/src/csharp.rs [1002:1063]
fn output_cstyle_enum(
&mut self,
name: &str,
variants: &BTreeMap<u32, Named<VariantFormat>>,
) -> Result<()> {
writeln!(self.out)?;
self.output_comment(name)?;
writeln!(self.out, "public enum {} {{", name)?;
self.out.indent();
for (index, variant) in variants {
writeln!(self.out, "{} = {},", variant.name, index)?;
}
self.out.unindent();
writeln!(self.out, "}}")?;
if self.generator.config.serialization {
let ext_name = format!("{}Extensions", name.to_camel_case());
writeln!(self.out, "public static class {} {{", ext_name)?;
self.enter_class(&ext_name, &[]);
writeln!(
self.out,
r#"
public static void Serialize(this {0} value, Serde.ISerializer serializer) {{
serializer.increase_container_depth();
serializer.serialize_variant_index((int)value);
serializer.decrease_container_depth();
}}
public static {0} Deserialize(Serde.IDeserializer deserializer) {{
deserializer.increase_container_depth();
int index = deserializer.deserialize_variant_index();
if (!Enum.IsDefined(typeof({0}), index))
throw new Serde.DeserializationException("Unknown variant index for {}: " + index);
{0} value = ({0})index;
deserializer.decrease_container_depth();
return value;
}}"#,
name
)?;
for encoding in &self.generator.config.encodings {
writeln!(
self.out,
r#"
public static byte[] {0}Serialize(this {1} value) {{
Serde.ISerializer serializer = new {0}.{0}Serializer();
Serialize(value, serializer);
return serializer.get_bytes();
}}"#,
encoding.name().to_camel_case(),
name
)?;
self.output_class_deserialize_for_encoding(name, *encoding)?;
}
self.leave_class(&[]);
writeln!(self.out, "}}")?;
}
Ok(())
}