in serde-generate/src/typescript.rs [266:355]
fn output_serialization_helper(&mut self, name: &str, format0: &Format) -> Result<()> {
use Format::*;
write!(
self.out,
"static serialize{}(value: {}, serializer: Serializer): void {{",
name.to_camel_case(),
self.quote_type(format0)
)?;
self.out.indent();
match format0 {
Option(format) => {
write!(
self.out,
r#"
if (value) {{
serializer.serializeOptionTag(true);
{}
}} else {{
serializer.serializeOptionTag(false);
}}
"#,
self.quote_serialize_value("value", format, false)
)?;
}
Seq(format) => {
write!(
self.out,
r#"
serializer.serializeLen(value.length);
value.forEach((item: {}) => {{
{}
}});
"#,
self.quote_type(format),
self.quote_serialize_value("item", format, false)
)?;
}
Map { key, value } => {
write!(
self.out,
r#"
serializer.serializeLen(value.size);
const offsets: number[] = [];
for (const [k, v] of value.entries()) {{
offsets.push(serializer.getBufferOffset());
{}
{}
}}
serializer.sortMapEntries(offsets);
"#,
self.quote_serialize_value("k", key, false),
self.quote_serialize_value("v", value, false)
)?;
}
Tuple(formats) => {
writeln!(self.out)?;
for (index, format) in formats.iter().enumerate() {
let expr = format!("value[{}]", index);
writeln!(
self.out,
"{}",
self.quote_serialize_value(&expr, format, false)
)?;
}
}
TupleArray {
content,
size: _size,
} => {
write!(
self.out,
r#"
value.forEach((item) =>{{
{}
}});
"#,
self.quote_serialize_value("item[0]", content, false)
)?;
}
_ => panic!("unexpected case"),
}
self.out.unindent();
writeln!(self.out, "}}\n")
}