¿Cómo usar Scala Cats Validado de la manera correcta?

Siguiendo es mi caso de uso

Estoy usando Gatos para la validación de mi configuración. Mi archivo de configuración está en json. Deserializo mi archivo de configuración a mi clase de casoConfig utilizando lift-json y luego validarlo con Cats. Estoy usandoest como guíaMi motivo para usar Cats es recopilar todos los errores si están presentes en el momento de la validación.

Mi problema son los ejemplos dados en la guía, son del tipo

case class Person(name: String, age: Int)

def validatePerson(name: String, age: Int): ValidationResult[Person] = {
   (validateName(name),validate(age)).mapN(Person)
}

Pero en mi caso ya deserialicé mi configuración en mi clase de caso (a continuación se muestra una muestra) y luego la paso para validación

case class Config(source: List[String], dest: List[String], extra: List[String])

def vaildateConfig(config: Config): ValidationResult[Config] = {
  (validateSource(config.source), validateDestination(config.dest))
   .mapN { case _ => config }
}

La diferencia aquí esmapN { case _ => config }. Como ya tengo una configuración si todo es válido, no quiero crear la configuración de nuevo a partir de sus miembros. Esto surge cuando paso la configuración para validar la función, no sus miembros.

Una persona en mi lugar de trabajo me dijo que esta no es la forma correcta, ya que Cats Validated proporciona una forma de construir un objeto si sus miembros son válidos. El objeto no debería existir o no debería ser construible si sus miembros no son válidos. Lo que tiene mucho sentido para mí.

¿Entonces debo hacer algún cambio? ¿Es aceptable lo anterior que estoy haciendo?

PS: La configuración anterior es solo un ejemplo, mi configuración real puede tener otras clases de casos como miembros que pueden depender de otras clases de casos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta