All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hammock.http.scala Maven / Gradle / Ivy

The newest version!
package hammock

import cats._
import cats.free._

sealed trait HttpF[A] {
  def req: HttpRequest
}

final case class Options(req: HttpRequest) extends HttpF[HttpResponse]
final case class Get(req: HttpRequest)     extends HttpF[HttpResponse]
final case class Head(req: HttpRequest)    extends HttpF[HttpResponse]
final case class Post(req: HttpRequest)    extends HttpF[HttpResponse]
final case class Put(req: HttpRequest)     extends HttpF[HttpResponse]
final case class Delete(req: HttpRequest)  extends HttpF[HttpResponse]
final case class Trace(req: HttpRequest)   extends HttpF[HttpResponse]
final case class Patch(req: HttpRequest)   extends HttpF[HttpResponse]

object Ops {
  def options(uri: Uri, headers: Map[String, String]): Free[HttpF, HttpResponse] =
    Free.liftF(Options(HttpRequest(uri, headers, None)))
  def get(uri: Uri, headers: Map[String, String]): Free[HttpF, HttpResponse] =
    Free.liftF(Get(HttpRequest(uri, headers, None)))
  def head(uri: Uri, headers: Map[String, String]): Free[HttpF, HttpResponse] =
    Free.liftF(Head(HttpRequest(uri, headers, None)))
  def post(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[HttpF, HttpResponse] =
    Free.liftF(Post(HttpRequest(uri, headers, entity)))
  def put(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[HttpF, HttpResponse] =
    Free.liftF(Put(HttpRequest(uri, headers, entity)))
  def delete(uri: Uri, headers: Map[String, String]): Free[HttpF, HttpResponse] =
    Free.liftF(Delete(HttpRequest(uri, headers, None)))
  def trace(uri: Uri, headers: Map[String, String]): Free[HttpF, HttpResponse] =
    Free.liftF(Trace(HttpRequest(uri, headers, None)))
  def patch(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[HttpF, HttpResponse] =
    Free.liftF(Patch(HttpRequest(uri, headers, entity)))
}

class HttpRequestC[F[_]](implicit I: InjectK[HttpF, F]) {
  def options(uri: Uri, headers: Map[String, String]): Free[F, HttpResponse] =
    Free.inject(Options(HttpRequest(uri, headers, None)))
  def get(uri: Uri, headers: Map[String, String]): Free[F, HttpResponse] =
    Free.inject(Get(HttpRequest(uri, headers, None)))
  def head(uri: Uri, headers: Map[String, String]): Free[F, HttpResponse] =
    Free.inject(Head(HttpRequest(uri, headers, None)))
  def post(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[F, HttpResponse] =
    Free.inject(Post(HttpRequest(uri, headers, entity)))
  def put(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[F, HttpResponse] =
    Free.inject(Put(HttpRequest(uri, headers, entity)))
  def delete(uri: Uri, headers: Map[String, String]): Free[F, HttpResponse] =
    Free.inject(Delete(HttpRequest(uri, headers, None)))
  def trace(uri: Uri, headers: Map[String, String]): Free[F, HttpResponse] =
    Free.inject(Trace(HttpRequest(uri, headers, None)))
  def patch(uri: Uri, headers: Map[String, String], entity: Option[Entity]): Free[F, HttpResponse] =
    Free.inject(Patch(HttpRequest(uri, headers, entity)))
}

object HttpRequestC {
  implicit def httpRequestC[F[_]](implicit I: InjectK[HttpF, F]): HttpRequestC[F] = new HttpRequestC[F]
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy