in codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/generators/config/ServiceConfigGenerator.kt [118:175]
fun render(writer: RustWriter) {
writer.docs("Service config.\n")
customizations.forEach {
it.section(ServiceConfig.ConfigStructAdditionalDocs)(writer)
}
writer.rustBlock("pub struct Config") {
customizations.forEach {
it.section(ServiceConfig.ConfigStruct)(this)
}
}
// Custom implementation for Debug so we don't need to enforce Debug down the chain
writer.rustBlock("impl std::fmt::Debug for Config") {
rustTemplate(
"""
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut config = f.debug_struct("Config");
config.finish()
}
"""
)
}
writer.rustBlock("impl Config") {
rustTemplate(
"""
/// Constructs a config builder.
pub fn builder() -> Builder { Builder::default() }
"""
)
customizations.forEach {
it.section(ServiceConfig.ConfigImpl)(this)
}
}
writer.docs("Builder for creating a `Config`.")
writer.raw("#[derive(Default)]")
writer.rustBlock("pub struct Builder") {
customizations.forEach {
it.section(ServiceConfig.BuilderStruct)(this)
}
}
writer.rustBlock("impl Builder") {
docs("Constructs a config builder.")
rustTemplate("pub fn new() -> Self { Self::default() }")
customizations.forEach {
it.section(ServiceConfig.BuilderImpl)(this)
}
docs("Builds a [`Config`].")
rustBlock("pub fn build(self) -> Config") {
rustBlock("Config") {
customizations.forEach {
it.section(ServiceConfig.BuilderBuild)(this)
}
}
}
}
}