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

io.hireproof.screening.Violation.scala Maven / Gradle / Ivy

package io.hireproof.screening

import cats.syntax.all._
import io.circe.syntax._
import io.circe.{Encoder, Json}

sealed abstract class Violation extends Product with Serializable {
  def toConstraint: Option[Constraint]

  def toActual: Option[Json]
}

object Violation {
  final case class Validation(constraint: Constraint, actual: Json) extends Violation {
    override def toConstraint: Option[Constraint] = constraint.some
    override def toActual: Option[Json] = actual.some
  }

  final case class Conflict(actual: Json) extends Violation {
    override def toConstraint: Option[Constraint] = none
    override def toActual: Option[Json] = actual.some
  }

  final case class Invalid(reference: Option[Json], actual: Json) extends Violation {
    override def toConstraint: Option[Constraint] = none
    override def toActual: Option[Json] = actual.some
  }

  final case class Missing(reference: Option[Json]) extends Violation {
    override def toConstraint: Option[Constraint] = none
    override def toActual: Option[Json] = none
  }

  final case class Unknown(actual: Json) extends Violation {
    override def toConstraint: Option[Constraint] = none
    override def toActual: Option[Json] = actual.some
  }

  def apply[A: Encoder](constraint: Constraint, actual: A): Violation = Validation(constraint, actual.asJson)
  def conflict[A: Encoder](actual: A): Violation = Conflict(actual.asJson)
  def invalid[A: Encoder](reference: A, actual: A): Violation = Invalid(reference.asJson.some, actual.asJson)
  def invalid[A: Encoder](actual: A): Violation = Invalid(reference = none, actual.asJson)
  val missing: Violation = Missing(reference = none)
  def missing[A: Encoder](reference: A): Violation = Missing(reference.asJson.some)
  def unknown[A: Encoder](actual: A): Violation = Unknown(actual.asJson)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy