in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/server/ServerDirectedCodegen.java [80:129]
public void generateService(GenerateServiceDirective<GoCodegenContext, GoSettings> directive) {
var namespace = directive.settings().getModuleName();
var delegator = directive.context().writerDelegator();
var settings = directive.settings();
var protocolGenerator = resolveProtocolGenerator(directive.context());
var model = directive.model();
var service = directive.service();
var shapesToDeserialize = TopDownIndex.of(model).getContainedOperations(service).stream()
.map(it -> model.expectShape(it.getInputShape(), StructureShape.class))
.flatMap(it -> getShapesToSerde(model, it).stream())
.collect(toSet());
var shapesToSerialize = TopDownIndex.of(model).getContainedOperations(service).stream()
.map(it -> model.expectShape(it.getOutputShape(), StructureShape.class))
.flatMap(it -> getShapesToSerde(model, it).stream())
.collect(toSet());
delegator.useFileWriter("service.go", namespace, GoWriter.ChainWritable.of(
new NotImplementedError(),
new ServerInterface(directive.model(), directive.service(), directive.symbolProvider()),
new NoopServiceStruct(directive.model(), directive.service(), directive.symbolProvider()),
new RequestHandler(protocolGenerator)
).compose());
delegator.useFileWriter("options.go", namespace,
new OptionsStruct(protocolGenerator));
delegator.useFileWriter("deserialize.go", namespace,
protocolGenerator.generateDeserializers(shapesToDeserialize));
delegator.useFileWriter("serialize.go", namespace,
protocolGenerator.generateSerializers(shapesToSerialize));
delegator.useFileWriter("validate.go", namespace,
new ServerValidationgenerator().generate(model, service, directive.symbolProvider()));
delegator.useFileWriter("protocol.go", namespace,
protocolGenerator.generateProtocolSource());
var noDocSerde = goTemplate("type noSmithyDocumentSerde = $T", SmithyGoTypes.Smithy.Document.NoSerde);
delegator.useFileWriter("document.go", namespace, noDocSerde);
delegator.useFileWriter("types/document.go", "types", noDocSerde);
List<SymbolDependency> dependencies = delegator.getDependencies();
delegator.flushWriters();
GoModuleInfo goModuleInfo = new GoModuleInfo.Builder()
.goDirective(settings.getGoDirective())
.dependencies(dependencies)
.build();
GoModGenerator.writeGoMod(settings, directive.fileManifest(), goModuleInfo);
ManifestWriter.writeManifest(settings, model, directive.fileManifest(), goModuleInfo);
}