I've tried creating the below implicit so that I can GET/read data from the postgreSQL database. I've tried add in the recommended implicits but they turn grey and seem to be unused.
implicit val get: Get[JobPostDetails] =
Get[Json].temap(_.as[JobPostDetails].leftMap(_.show))
def createTable: doobie.Update0 = {
sql"""
|CREATE TABLE IF NOT EXISTS jobs (
| id TEXT PRIMARY KEY,
| details JSON NOT NULL
|)
""".stripMargin
.update
}
case class JobPost(id: String, details: JobPostDetails)
case class JobPostDetails(title: String, description: String, salary: Double, employmentType: String, employer: String)
[warn] insecure HTTP request is deprecated 'http://repo.typesafe.com/typesafe/releases/'; switch to HTTPS or opt-in as ("Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/").withAllowInsecureProtocol(true)
[info] Compiling 1 Scala source to /Users/ryanmcavoy/fullStackRyan/job-board/target/scala-2.13/classes ...
[error] /Users/ryanmcavoy/fullStackRyan/job-board/src/main/scala/io/github/jobboard/model/JobPost.scala:31:44: value leftMap is not a member of io.circe.Decoder.Result[io.github.jobboard.model.JobPostDetails]
[error] Get[Json].temap(_.as[JobPostDetails].leftMap(_.show))
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 1 s, completed 3 Sep 2020, 16:41:02
sbt:job-board>
[![enter image description here][1]][1]
[![enter image description here][2]][2]
[1]: https://i.sstatic.net/PvKHJ.png
[2]: https://i.sstatic.net/9QPz6.png
Older versions of Scala provided .leftMap
to Either
(because this is what Circe Result aliases to), which might have been mentioned in the source that you used.
However, newer versions cleaned up API a bit to they used .left
and .right
to aggregate many of the methods. So .leftMap
became .left.map
, but you have also .left.flatMap
etc, so that you can use Either
easily not only in use cases that align with Either being Right-biased.
So long story short - replace .leftMap
with .left.map
in newer versions of Scala.