[ad_1]
I have a Scala Play endpoint that returns complex JSON configuration that has a structure like this:
Configuration
|__ DBConfig
|__ SecretDef
|__ SecondDBConfig
|__ SecretDef
|__ AuthConfig
|__ SecretDef
There’s more than 20 implicit formatters used to serialize this configuration and one for SecretDef looks like:
implicit val fSecretFormat: Format[SecretDef] = new Format[SecretDef] {
override def writes(o: SecretDef): JsValue =
Json.toJson(o.value)
override def reads(json: JsValue): JsResult[SecretDef] = ???
}
I need to implement another version of the same endpoint that returns whole configuration but with defrent version of writes for SecretDef:
implicit val fSecretFormatDec: Format[SecretDef] = new Format[SecretDef] {
override def writes(o: SecretDef): JsValue =
Json.toJson(decryptWithAES(o.value))
override def reads(json: JsValue): JsResult[SecretDef] = ???
}
Within controllers I’m importing all implicits, but I have a problem to swap implicit formatter for SecretDef in particular action for V2 endpoint.
Something like this would be ideal, but it doesn’t work:
Action.async { implicit request =>
implicit val fSecret: Format[SecretDef] = utils.SecretFormatters.fSecretFormatEnc
for {
config <- configRepo.getConfig()
} yield Ok(Json.toJson(tenant))
}
[ad_2]