in thrift/src/main/scala/com/twitter/finatra/thrift/routing/routers.scala [296:333]
private[this] def addController(
controller: Controller,
conf: Controller.ControllerConfig
): ThriftService = {
assert(
conf.isValid, {
val expectStr = conf.gen.methods.map(_.name).mkString("{", ", ", "}")
val actualStr = conf.methods.map(_.method.name).mkString("{", ", ", "}")
s"${controller.getClass.getSimpleName} for service " +
s"${conf.gen.getClass.getSimpleName} is misconfigured. " +
s"Expected exactly one implementation for each of $expectStr but found $actualStr"
}
)
routes = conf.methods.map { cm =>
val method: ThriftMethod = cm.method
val service =
cm.impl.asInstanceOf[Service[Request[method.Args], Response[method.SuccessType]]]
thriftMethodRegistrar.register(controller.getClass, method, cm.filters)
method -> {
val endpoint = ServiceFactory.const(cm.filters.andThen(service))
val stack = filterStack ++ Stack.leaf(finagle.stack.Endpoint, endpoint)
val params = Stack.Params.empty +
param.Label(serverName) +
param.Tags(method.name, method.serviceName)
val svcFac = stack.make(params)
Service.pending(svcFac()).asInstanceOf[ScroogeServiceImpl]
}
}.toMap
logger.info(
"Adding methods\n" + routes.keys
.map(method => s"${controller.getClass.getSimpleName}.${method.name}")
.mkString("\n")
)
conf.gen.unsafeBuildFromMethods(routes).toThriftService
}