/ / Come usare le stringhe come tipo senza hardcoding? - scala, tipi, macro

Come usare le stringhe come tipo senza hardcoding loro? - scala, tipi, macro

Ho un codice per convertire la stringa json in oggetti come i seguenti:

def apply(line: String): PairEvent = {
val (name, json) = line.span(_ != " ")
name match {
case "OpenTabEvent" => Serialization.read[OpenTabEvent](json)
case "CloseTabEvent" => Serialization.read[CloseTabEvent](json)
case "ChangeContentEvent" => Serialization.read[ChangeContentEvent](json)
case "ChangeMasterRequest" => Serialization.read[ChangeMasterRequest](json)
case "CreateFileEvent" => Serialization.read[CreateFileEvent](json)
case "DeleteFileEvent" => Serialization.read[DeleteFileEvent](json)
case "CreateDirEvent" => Serialization.read[CreateDirEvent](json)
case "DeleteDirEvent" => Serialization.read[DeleteDirEvent](json)
case "WatchingFiles" => Serialization.read[WatchingFiles](json)
case _ =>
ServerLogger.info("!!!!!!!!!!!!!!!!!!!!! unknown line from server: " + line)
???
}
}

Puoi vedere che ho codificato alcune stringhe e li uso come tipi da convertire in oggetti.

C'è un modo per fare lo stesso senza hardcode? Non sono sicuro che sia possibile, anche con la macro.

risposte:

0 per risposta № 1

Potresti usare il nome della classe:

case OpenTabEvent.getClass.getSimpleName => Serialization.read[OpenTabEvent](json)