override def apply()

in ratatool-shapeless/src/main/scala/com/spotify/ratatool/shapeless/CaseClassDiffy.scala [163:178]


  override def apply(x: T, y: T): Seq[Delta] =
    diff(Some(asMap(x)), Some(asMap(y)))
      .filter(f => !hnilIgnore.exists(f.field.contains(_)))

  private def hnilIgnore = ignore ++ Set(HNil.toString)

  private def diff(left: Any, right: Any, pref: String = ""): Seq[Delta] = {
    def diffMap(left: Map[String, Any], right: Map[String, Any], pref: String = pref) =
      (left.keySet ++ right.keySet).toSeq
        .flatMap(k => diff(left.get(k), right.get(k), if (pref.isEmpty) k else s"$pref.$k"))

    (left, right) match {
      case (Some(l: Map[String, Any]), Some(r: Map[String, Any])) => diffMap(l, r, pref)
      case (Some(l), Some(r)) => Seq(Delta(pref, Option(l), Option(r), delta(l, r)))
    }
  }