Fetch Client
The FetchClientBuilder creates a standard http4s Client that is described in the http4s documentation.
Example
libraryDependencies += "org.http4s" %%% "http4s-circe" % "0.23.25"
libraryDependencies += "io.circe" %%% "circe-generic" % "0.14.2"
import cats.effect._
import cats.effect.unsafe.implicits._
import io.circe.generic.auto._
import org.http4s.circe.CirceEntityCodec._
import org.http4s.dom._
import org.scalajs.dom._
val client = FetchClientBuilder[IO].create
val repoName = document.getElementById("repo").asInstanceOf[HTMLInputElement]
val repoStars = document.getElementById("stars").asInstanceOf[HTMLElement]
case class Repo(stargazers_count: Int)
val fetchRepo: IO[Unit] = for {
_ <- IO(repoStars.innerHTML = "<i>fetching...</i>")
name <- IO(repoName.value)
repo <- client.expect[Repo](s"https://api.github.com/repos/$name").attempt
_ <- IO {
repo match {
case Right(Repo(stars)) => repoStars.innerHTML = s"$stars ★"
case Left(_) => repoStars.innerHTML = s"Not found :("
}
}
} yield ()
val button = document.getElementById("button").asInstanceOf[HTMLButtonElement]
button.onclick = _ => fetchRepo.unsafeRunAndForget()
How many stars?