in scrooge-generator/src/main/scala/com/twitter/scrooge/backend/ServiceTemplate.scala [173:231]
def finagleService(service: Service, namespace: Identifier): Dictionary =
Dictionary(
"package" -> genID(namespace),
"ServiceName" -> genID(service.sid.toTitleCase),
"docstring" -> v(service.docstring.getOrElse("")),
"hasParent" -> v(service.parent.isDefined),
"finagleServiceParent" ->
service.parent.map(getParentFinagleService).getOrElse(genBaseFinagleService),
"methodService" -> v(templates("methodService")),
"methodServices" -> v(service.functions map { f =>
Dictionary(
"methodSvcNameForCompile" -> genID(f.funcName.toCamelCase),
"violationReturningMethodSvcNameForCompile" -> genID(
f.funcName.toTitleCase.prepend("violationReturning")),
"methodSvcNameForWire" -> v(f.originalName),
"__stats_name" -> genID(f.funcName.toCamelCase.prepend("__stats_")),
"funcObjectName" -> genID(functionObjectName(f)),
"argNames" ->
v(
f.args
.map { field => "args." + genID(field.sid).toData }
.mkString(", ")
),
"argsWithValidations" -> {
val validatedArg = f.args.filter(hasValidationAnnotation)
v(validatedArg.zipWithIndex.map {
case (arg, index) =>
Dictionary(
"violationArg" -> v(genID(arg.sid) + "Violations"),
"arg" -> v("args." + genID(arg.sid)),
"typeParameter" -> genType(arg.fieldType),
"deReferencedArg" -> v(
"args." + genOptional(genID(arg.sid), arg.requiredness.isOptional)),
"isOption" -> v(arg.requiredness.isOptional),
"isValidationType" -> v(arg.fieldType.isInstanceOf[StructType]),
"firstArg" -> v(index == 0),
"middleArgs" -> v(index > 0 && index < validatedArg.size - 1),
"lastArg" -> v(index == validatedArg.size - 1)
)
})
},
"typeName" -> genType(f.funcType),
"isVoid" -> v(f.funcType == Void || f.funcType == OnewayVoid),
"resultNamedArg" ->
v(if (f.funcType != Void && f.funcType != OnewayVoid) "success = Some(resTry.apply())"
else ""),
"exceptions" -> v(f.throws.zipWithIndex map {
case (t, index) =>
Dictionary(
"exceptionType" -> genType(t.fieldType),
"fieldName" -> genID(t.sid),
"first" -> v(index == 0),
"last" -> v(index == f.throws.size - 1)
)
}),
"hasExceptions" -> v(f.throws.nonEmpty),
"hasValidationAnnotation" -> v(f.args.exists(hasValidationAnnotation))
)
}),