func render()

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
        }