Skip to content

Commit

Permalink
Allow user to change default ValidationFieldConfig (#104)
Browse files Browse the repository at this point in the history
  • Loading branch information
RustedBones authored Jan 20, 2021
1 parent 033543f commit 9a94d09
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,15 @@ final private[elitzur] case class DerivedValidator[T] private(caseClass: CaseCla
val v = p.typeclass.validateRecord(Unvalidated(deref))
val validationType = p.typeclass.asInstanceOf[FieldValidator[_]].validationType

val c: ValidationFieldConfig = config.m
.getOrElse(name, DefaultFieldConfig).asInstanceOf[ValidationFieldConfig]
val c = config.fieldConfig(name)
if (v.isValid) {
if (c != NoCounter) {
reporter.reportValid(
counterClassName,
name,
validationType)
}
}
else if (v.isInvalid) {
} else if (v.isInvalid) {
if (c == ThrowException) {
throw new DataInvalidException(
s"Invalid value ${v.forceGet.toString} found for field $path${p.label}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,27 @@
*/
package com.spotify.elitzur.validators

trait ValidationConfig
trait ValidationFieldConfig extends ValidationConfig
trait ValidationConfig extends Serializable

trait ValidationRecordConfig extends ValidationConfig {
def m: Map[String, ValidationConfig]
def fieldConfig(name: String): ValidationFieldConfig
}

case class MapConfig(m: Map[String, ValidationConfig]) extends ValidationRecordConfig

case object DefaultRecordConfig extends ValidationRecordConfig {
override def m: Map[String, ValidationConfig] = Map()
class MapConfig(
m: Map[String, ValidationFieldConfig],
default: ValidationFieldConfig = DefaultFieldConfig
) extends ValidationRecordConfig {
override def fieldConfig(name: String): ValidationFieldConfig = m.getOrElse(name, default)
}

case object DefaultRecordConfig extends MapConfig(Map())

object ValidationRecordConfig {
def apply(s: (String, ValidationConfig)*): ValidationRecordConfig =
MapConfig(Map(s:_*))
def apply(s: (String, ValidationFieldConfig)*): ValidationRecordConfig = new MapConfig(Map(s:_*))
}

sealed trait ValidationFieldConfig extends ValidationConfig
case object ThrowException extends ValidationFieldConfig
case object NoCounter extends ValidationFieldConfig
case object DefaultFieldConfig extends ValidationFieldConfig

0 comments on commit 9a94d09

Please sign in to comment.