Scala JSON формат для рекурсивных классов с обобщениями - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь записать правила в модель вот что у меня есть

trait Criterion[T] {
  val name: String
  def matches(t: T): Future[Boolean]
}
trait Predicate[T] extends Criterion[T] {
  val criteria: Seq[Criterion[T]]
  val operand: RuleOperand.Name

  override def matches(t: T): Future[Boolean] = {
    val predicate: Boolean => Boolean = if (operand == RuleOperand.ANY) _ == true else _ == false
    Future.find(criteria.map(_.matches(t)))(predicate) map {
      case Some(true) if operand == RuleOperand.ANY => true
      case Some(false) if operand == RuleOperand.ALL => true
      case _ => false
    }
  }
}
case class WeightCriterion(limit: Int) extends Criterion[Person] {
  override val name: String = "weight"

  override def matches(person: Person): Future[Boolean] =
     Future.successful(person.weight > limit)
}

case class HeightCriterion(limit: Int) extends Criterion[Person] {
  override val name: String = "height"

  override def matches(person: Person): Future[Boolean] = 
    Future.successful(person.height > limit)
}

Criterion хорошо работает от Object до Json и от Json до Object, но я не могу заставить работать формат Predicate. Как мне заставить его работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...