All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.getquill.quotation.EntityConfigParsing.scala Maven / Gradle / Ivy

There is a newer version: 4.6.0
Show newest version
package io.getquill.quotation

import io.getquill.ast.PropertyAlias

import scala.reflect.macros.whitebox.Context

case class EntityConfig(
  alias:      Option[String]      = None,
  properties: List[PropertyAlias] = List(),
  generated:  Option[String]      = None
)

trait EntityConfigParsing extends UnicodeArrowParsing {
  val c: Context

  import c.universe.{ Function => _, Ident => _, _ }

  def parseEntityConfig(t: Tree): EntityConfig =
    t match {
      case q"$e.entity(${ name: String })" =>
        parseEntityConfig(e).copy(alias = Some(name))
      case q"$e.columns(..$propertyAliases)" =>
        parseEntityConfig(e).copy(properties = propertyAliases.map(parsePropertyAlias))
      case q"$e.generated(($alias) => $body)" =>
        parseEntityConfig(e).copy(generated = Some(parseProperty(body)))
      case _ =>
        EntityConfig()
    }

  private def parseProperty(t: Tree): String =
    t match {
      case q"$e.$property" => property.decodedName.toString
    }

  private def parsePropertyAlias(t: Tree): PropertyAlias =
    t match {
      case q"(($x1) => scala.this.Predef.ArrowAssoc[$t]($x2.$prop).$arrow[$v](${ alias: String }))" =>
        PropertyAlias(prop.decodedName.toString, alias)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy