in serde-generate/src/dart.rs [386:469]
fn output_serialization_helper(&mut self, name: &str, format0: &Format) -> Result<()> {
use Format::*;
write!(
self.out,
"static void serialize{}({} value, BinarySerializer serializer) {{",
name.to_camel_case(),
self.quote_type(format0)
)?;
self.out.indent();
match format0 {
Option(format) => {
write!(
self.out,
r#"
if (value == null) {{
serializer.serializeOptionTag(false);
}} else {{
serializer.serializeOptionTag(true);
{}
}}
"#,
self.quote_serialize_value("value", format)
)?;
}
Seq(format) => {
write!(
self.out,
r#"
serializer.serializeLength(value.length);
for (final item in value) {{
{}
}}
"#,
self.quote_serialize_value("item", format)
)?;
}
Map { key, value } => {
write!(
self.out,
r#"
serializer.serializeLength(value.length);
final offsets = List<int>.filled(value.length, 0);
var count = 0;
value.entries.forEach((entry) {{
offsets[count++] = serializer.offset;
{}
{}
}});
"#,
self.quote_serialize_value("entry.key", key),
self.quote_serialize_value("entry.value", value)
)?;
}
Tuple(formats) => {
writeln!(self.out)?;
for (index, format) in formats.iter().enumerate() {
let expr = format!("value.item{}", index + 1);
writeln!(self.out, "{}", self.quote_serialize_value(&expr, format))?;
}
}
TupleArray { content, size } => {
write!(
self.out,
r#"
assert (value.length == {});
for (final item in value) {{
{}
}}
"#,
size,
self.quote_serialize_value("item", content),
)?;
}
_ => panic!("unexpected case"),
}
self.out.unindent();
writeln!(self.out, "}}\n")
}