Ho un sacco di case classes simili che significano cose diverse ma hanno lo stesso elenco di argomenti.Trasforma una classe di case in un'altra quando l'elenco degli argomenti è lo stesso
object User {
case class Create(userName:String, firstName: String, lastName: String)
case class Created(userName:String, firstName: String, lastName: String)
}
object Group {
case class Create(groupName:String, members: Int)
case class Created(groupName:String, members: Int)
}
Dato questo tipo di messa a punto, ero stanco di metodi di scrittura che prendono un argomento di tipo Crea e restituisce un argomento di tipo Creato. Ho un sacco di casi di test che fanno esattamente questo genere di cose.
Potrei scrivere una funzione per convertire una classe di caso nell'altra. Questa funzione converte User.Create
in User.Created
def userCreated(create: User.Create) = User.Create.unapply(create).map((User.Created.apply _).tupled).getOrElse(sys.error(s"User creation failed: $create"))
ho dovuto scrivere un altro tale funzione per il gruppo. Quello che mi piacerebbe davvero avere è una funzione generica che prende i due tipi delle classi case e un oggetto di una classe case e converte nell'altra. Qualcosa di simile,
def transform[A,B](a: A):B
Inoltre, questa funzione non dovrebbe vanificare lo scopo di ridurre il boilerplate. Non esitare a suggerire una firma diversa per la funzione, se è più facile da usare.
Ti aspetti qualcosa di simile a 'convert (a) .to [B]'? –
È importante che tutte queste classi abbinate abbiano il nome creato/creato o il tuo requisito sia puramente accoppiato e che l'unica funzione trasformi la prima classe di una qualsiasi di queste coppie nel secondo? – itsbruce