
com.kyleu.projectile.models.thrift.parse.ThriftFieldThriftHelper.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of projectile-parser-thrift_2.13 Show documentation
Show all versions of projectile-parser-thrift_2.13 Show documentation
Reads and transforms Thrift IDL files
The newest version!
package com.kyleu.projectile.models.thrift.parse
import com.kyleu.projectile.models.export.ExportField
import com.kyleu.projectile.models.export.typ.FieldType
import com.kyleu.projectile.models.output.ExportHelper
import com.kyleu.projectile.models.thrift.input.{ThriftFileHelper, ThriftInput}
import com.kyleu.projectile.models.thrift.schema.ThriftStructField
object ThriftFieldThriftHelper {
def getAsThrift(field: ThriftStructField, input: ThriftInput) = {
val t = ThriftFileHelper.columnTypeFor(field.t, input)
parse(field.name, t, field.required)
}
def getFromField(field: ExportField) = {
parse(ExportHelper.escapeKeyword(field.propertyName), field.t, field.required)
}
private[this] def parse(name: String, t: FieldType, required: Boolean): String = t match {
case FieldType.MapType(_, v) =>
val valuesMapped = parseMapped(v, "map", "mapValues")
if (required) {
s"$name$valuesMapped"
} else if (valuesMapped.isEmpty) {
s"$name"
} else {
s"$name.map(x => x$valuesMapped)"
}
case FieldType.ListType(typ) =>
val mapped = parseMapped(typ, "seq")
if (required) {
s"$name$mapped"
} else if (mapped.isEmpty) {
s"$name"
} else {
s"$name.map(x => x$mapped)"
}
case FieldType.SetType(typ) =>
val mapped = parseMapped(typ, "set")
if (required) {
s"$name$mapped.toSet"
} else if (mapped.isEmpty) {
s"$name.map(_.toSet)"
} else {
s"$name.map(x => x$mapped.toSet)"
}
case _ if t.isScalar => name
case _ if required => s"$name.asThrift"
case _ => s"$name.map(_.asThrift)"
}
private[this] def parseMapped(t: FieldType, ctx: String, key: String = "map"): String = t match {
case FieldType.MapType(_, _) => throw new IllegalStateException(s"Unhandled [$ctx] child Map")
case FieldType.ListType(typ) => typ match {
case FieldType.StructType(_, _) => s".$key(_${parseMapped(typ, ctx)})"
case FieldType.EnumType(_) => s".$key(_${parseMapped(typ, ctx)})"
case _ => ""
}
case FieldType.SetType(_) => throw new IllegalStateException(s"Unhandled [$ctx] child Set")
case _ if t.isScalar => ""
case _ => s".$key(_.asThrift)"
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy