in serde-generate/src/rust.rs [180:216]
fn output_preamble(&mut self) -> Result<()> {
let external_names = self
.generator
.config
.external_definitions
.values()
.cloned()
.flatten()
.collect::<HashSet<_>>();
writeln!(self.out, "#![allow(unused_imports)]")?;
if !external_names.contains("Map") {
writeln!(self.out, "use std::collections::BTreeMap as Map;")?;
}
if self.generator.config.serialization {
writeln!(self.out, "use serde::{{Serialize, Deserialize}};")?;
}
if self.generator.config.serialization && !external_names.contains("Bytes") {
writeln!(self.out, "use serde_bytes::ByteBuf as Bytes;")?;
}
for (module, definitions) in &self.generator.config.external_definitions {
// Skip the empty module name.
if !module.is_empty() {
writeln!(
self.out,
"use {}::{{{}}};",
module,
definitions.to_vec().join(", "),
)?;
}
}
writeln!(self.out)?;
if !self.generator.config.serialization && !external_names.contains("Bytes") {
// If we are not going to use Serde derive macros, use plain vectors.
writeln!(self.out, "type Bytes = Vec<u8>;\n")?;
}
Ok(())
}