
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