Fix type convertion for option type (#294)

This commit is contained in:
Pavel 2021-09-09 19:47:23 +03:00 committed by GitHub
parent 49da2a07ad
commit dc1f6c2faa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 8 deletions

View File

@ -18,16 +18,28 @@ object JavaScriptCommon {
def callBackExprBody(at: ArrowType, callbackName: String): String = {
val arrowArgumentsToCallbackArgumentsList =
at.domain.toList.zipWithIndex
.map(_._2)
.map(idx => s"req.args[$idx]")
.map((`type`, idx) => {
val valueFromArg = s"req.args[$idx]"
`type` match {
case OptionType(t) =>
s"${valueFromArg}.length === 0 ? null : ${valueFromArg}[0]"
case _ => valueFromArg
}
})
.concat(List("callParams"))
.mkString(", ")
val callCallbackStatement = s"$callbackName(${arrowArgumentsToCallbackArgumentsList})"
val callCallbackStatementAndReturn =
at.res.fold(s"${callCallbackStatement}; resp.result = {}")(_ =>
s"resp.result = ${callCallbackStatement}"
at.res.fold(s"${callCallbackStatement}; resp.result = {}")(`type` =>
`type` match {
case OptionType(t) => s"""
| var respResult = ${callCallbackStatement};
| resp.result = respResult === null ? [] : [respResult]
|""".stripMargin
case _ => s"resp.result = ${callCallbackStatement}"
}
)
val tetraplets = FuncRes

View File

@ -70,16 +70,27 @@ object TypeScriptCommon {
val arrowArgumentsToCallbackArgumentsList =
at.domain.toList
.zipWithIndex
.map(_._2)
.map(idx => s"req.args[$idx]")
.map((`type`, idx) => {
val valueFromArg = s"req.args[$idx]"
`type` match {
case OptionType(t) => s"${valueFromArg}.length === 0 ? null : ${valueFromArg}[0]"
case _ => valueFromArg
}
})
.concat(List("callParams"))
.mkString(", ")
val callCallbackStatement = s"$callbackName(${arrowArgumentsToCallbackArgumentsList})"
val callCallbackStatementAndReturn =
at.res.fold(s"${callCallbackStatement}; resp.result = {}")(_ =>
s"resp.result = ${callCallbackStatement}"
at.res.fold(s"${callCallbackStatement}; resp.result = {}")(`type` =>
`type` match {
case OptionType(t) => s"""
| var respResult = ${callCallbackStatement};
| resp.result = respResult === null ? [] : [respResult]
|""".stripMargin
case _ => s"resp.result = ${callCallbackStatement}"
}
)
val tetraplets = FuncRes