case classConditionalMapping[T](condition: Condition, wrapped: Mapping[T], defaultValue: T, constraints: Seq[Constraint[T]] = Nil, keys: Set[String] = Set()) extends Mapping[T] with Product with Serializable
case classMandatoryOptionalMapping[T](wrapped: Mapping[T], constraints: Seq[Constraint[Option[T]]] = Nil) extends Mapping[Option[T]] with Product with Serializable