В вашем случае Doob ie не знает, как сериализовать JobPostDetails
в столбец JSON в вашей базе данных Postgres.
По умолчанию Doob ie не знает как изменить класс case на JSON. Возможно, самая популярная библиотека для сериализации JSON в scala - это circe. Вам нужно будет добавить дополнительные зависимости в ваш build.sbt
для интеграции circe и circe- Postgres -doob ie.
"org.tpolecat" %% "doobie-postgres" % "0.8.8"
"org.tpolecat" %% "doobie-postgres-circe" % "0.8.8"
"io.circe" %% "circe-core" % "0.13.0"
Затем вы должны создать экземпляры Encoder
, Decoder
, Put
и Get
классы типов в сопутствующем объекте JobPostDetails
:
import io.circe.{ Decoder, Encoder }
import io.circe.generic.semiauto.{ deriveDecoder, deriveEncoder }
import doobie.postgres.circe.json.implicits._
import doobie._
import io.circe.syntax._
case class JobPostDetails(title: String, description: String, salary: Double, employmentType: String, employer: String)
object JobPostDetails {
//for decoding json into JobPostDetails
implicit val circeDecoder: Decoder[JobPostDetails] =
deriveDecoder[JobPostDetails]
//for encoding JobPostDetails into json
implicit val circeEncoder: Encoder[JobPostDetails] =
deriveEncoder[JobPostDetails]
//tells doobie to put JobPostDetails as json to details column
implicit val put: Put[JobPostDetails] =
Put[Json].contramap(_.asJson)
//tells doobie how to read JobPostDetails from json column
implicit val get: Get[JobPostDetails] =
Get[Json].temap(_.as[JobPostDetails].leftMap(_.show))
}
После этого вы сможете сохранить JobPost
.