
com.github.tminglei.slickpg.PgArgonautSupport.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of slick-pg_argonaut_2.10 Show documentation
Show all versions of slick-pg_argonaut_2.10 Show documentation
Slick extensions for PostgreSQL - argonaut module
The newest version!
package com.github.tminglei.slickpg
import slick.driver.PostgresDriver
import slick.jdbc.{JdbcType, PositionedResult}
trait PgArgonautSupport extends json.PgJsonExtensions with utils.PgCommonJdbcTypes { driver: PostgresDriver =>
import driver.api._
import argonaut._, Argonaut._
def pgjson: String
/// alias
trait JsonImplicits extends ArgonautJsonImplicits
trait ArgonautJsonImplicits {
implicit val argonautJsonTypeMapper: JdbcType[Json] =
new GenericJdbcType[Json](
pgjson,
(s) => s.parse.toOption.getOrElse(jNull),
(v) => v.nospaces,
zero = jNull,
hasLiteralForm = false
)
implicit def argonautJsonColumnExtensionMethods(c: Rep[Json]) = {
new JsonColumnExtensionMethods[Json, Json](c)
}
implicit def argonautJsonOptionColumnExtensionMethods(c: Rep[Option[Json]]) = {
new JsonColumnExtensionMethods[Json, Option[Json]](c)
}
}
trait ArgonautJsonPlainImplicits {
import utils.PlainSQLUtils._
import scala.reflect.classTag
// used to support code gen
if (driver.isInstanceOf[ExPostgresDriver]) {
driver.asInstanceOf[ExPostgresDriver].bindPgTypeToScala("json", classTag[Json])
driver.asInstanceOf[ExPostgresDriver].bindPgTypeToScala("jsonb", classTag[Json])
}
implicit class PgJsonPositionedResult(r: PositionedResult) {
def nextJson() = nextJsonOption().getOrElse(jNull)
def nextJsonOption() = r.nextStringOption().flatMap(_.parse.toOption)
}
///////////////////////////////////////////////////////////
implicit val getJson = mkGetResult(_.nextJson())
implicit val getJsonOption = mkGetResult(_.nextJsonOption())
implicit val setJson = mkSetParameter[Json](pgjson, _.nospaces)
implicit val setJsonOption = mkOptionSetParameter[Json](pgjson, _.nospaces)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy