All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.virtuslab.ideprobe.jsonrpc.PayloadJsonFormat.scala Maven / Gradle / Ivy

There is a newer version: 0.53.0
Show newest version
package org.virtuslab.ideprobe.jsonrpc

import com.typesafe.config.ConfigRenderOptions
import org.virtuslab.ideprobe.ConfigFormat
import pureconfig.ConfigReader
import pureconfig.ConfigSource
import pureconfig.ConfigWriter
import scala.util.control.NonFatal

object PayloadJsonFormat extends ConfigFormat {
  type SerializedJson = String

  val Null: SerializedJson = toJson(Option.empty[String])

  def fromJson[A: ConfigReader](json: SerializedJson): A =
    try {
      ConfigSource.string(json).loadOrThrow[Map[String, A]].getOrElse("data", null.asInstanceOf[A])
    } catch {
      case NonFatal(e) =>
        throw new Exception(s"Could not parse json: $json", e)
    }

  def fromJsonOpt[A: ConfigReader](json: SerializedJson): Option[A] = {
    ConfigSource.string(json).load[Map[String, A]].toOption.map(_.getOrElse("data", null.asInstanceOf[A]))
  }

  def toJson[A: ConfigWriter](a: A): SerializedJson =
    try {
      val wrapped = Map("data" -> a)
      ConfigWriter[Map[String, A]].to(wrapped).render(ConfigRenderOptions.concise.setJson(true))
    } catch {
      case NonFatal(e) =>
        throw new Exception(s"Could not serialize: $a", e)
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy