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

scaladog.api.DDPickle.scala Maven / Gradle / Ivy

package scaladog.api

import java.time.Instant

/**
  * http://www.lihaoyi.com/upickle/#CustomConfiguration
  */
object DDPickle extends upickle.AttributeTagged {
  private def camelToSnake(s: String) = {
    s.split("(?=[A-Z])", -1).map(_.toLowerCase).mkString("_")
  }
  private def snakeToCamel(s: String) = {
    val res = s.split("_", -1).map(x => s"${x(0).toUpper}${x.drop(1)}").mkString
    s"${s(0).toLower}${res.drop(1)}"
  }

  override def objectAttributeKeyReadMap(s: CharSequence): String =
    snakeToCamel(s.toString)
  override def objectAttributeKeyWriteMap(s: CharSequence): String =
    camelToSnake(s.toString)

  override def objectTypeKeyReadMap(s: CharSequence): String =
    snakeToCamel(s.toString)
  override def objectTypeKeyWriteMap(s: CharSequence): String =
    camelToSnake(s.toString)

  override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
    implicitly[Writer[T]].comap[Option[T]] {
      case None    => null.asInstanceOf[T]
      case Some(x) => x
    }

  override implicit def OptionReader[T: Reader]: Reader[Option[T]] =
    implicitly[Reader[T]].mapNulls {
      case null => None
      case x    => Some(x)
    }

  implicit val instantRW: ReadWriter[Instant] =
    readwriter[Long].bimap(_.getEpochSecond, Instant.ofEpochSecond)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy