in Sources/DistributedActorsGenerator/Decls+GenActorRendering.swift [158:205]
func render() throws -> String {
let actorableProtocols = self.nominal.actorableProtocols.sorted()
let context: [String: String] = [
"baseName": self.nominal.fullName,
"actorableProtocol": self.nominal.type == .protocol ? self.nominal.name : "",
"varLetInstance": self.nominal.renderStoreInstanceAs,
"messageAccess": "public", // TODO: allow non public actor messages
"funcCases": self.nominal.renderCaseDecls,
"extensionWhereClause": self.nominal.isGeneric ?
"" :
" where Act.Message == \(self.nominal.fullName).Message",
"funcSwitchCases": try self.renderFuncSwitchCases(),
"funcBoxSwitchCases": try self.renderFuncBoxSwitchCases(actorableProtocols: actorableProtocols),
"boxFuncs": try self.renderBoxFuncs(actorableProtocols: actorableProtocols),
"remoteImplFuncs": try self.renderRemoteFuncImpls(),
"funcBoxTells": try self.renderFuncBoxTells(),
"tryIfReceiveTerminatedIsThrowing": self.nominal.receiveTerminatedIsThrowing ? "try " : " ",
"tryIfReceiveSignalIsThrowing": self.nominal.receiveSignalIsThrowing ? "try " : " ",
]
var rendered: String = "\n"
switch self.nominal.type {
case .protocol:
rendered.append(Self.messageForProtocolTemplate.render(context))
default:
rendered.append(Self.messageForNonProtocolTemplate.render(context))
rendered.append("\n")
}
switch self.nominal.type {
case .distributedActor:
rendered.append(Self.behaviorTemplate.render(context))
rendered.append(Self.actorTellTemplate.render(context))
case .protocol:
rendered.append(Self.boxingForProtocolTemplate.render(context))
}
return rendered
}