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

hammock.hi.Opts.scala Maven / Gradle / Ivy

The newest version!
package hammock
package hi

import cats.{Eq, Show}
import cats.implicits._
import alleycats.Empty

import monocle.{Lens, Optional}
import monocle.macros.GenLens

case class Opts(auth: Option[Auth], headers: Map[String, String], cookies: Option[List[Cookie]])

object Opts {

  val auth: Lens[Opts, Option[Auth]] = GenLens[Opts](_.auth)

  val authOpt: Optional[Opts, Auth] = Optional[Opts, Auth] {
    _.auth
  } { auth =>
    {
      case opts @ Opts(Some(_), _, _) => opts.copy(auth = Some(auth))
      case opts                       => opts
    }
  }

  val headers: Lens[Opts, Map[String, String]] = GenLens[Opts](_.headers)

  val cookies: Lens[Opts, Option[List[Cookie]]] = GenLens[Opts](_.cookies)

  val cookiesOpt: Optional[Opts, List[Cookie]] = Optional[Opts, List[Cookie]] {
    _.cookies
  } { cookies =>
    {
      case opts @ Opts(_, _, Some(_)) => opts.copy(cookies = Some(cookies))
      case opts                       => opts
    }
  }

  implicit val optsEmpty = new Empty[Opts] {
    def empty = Opts(None, Map(), None)
  }

  implicit val optsEq = new Eq[Opts] {
    def eqv(a: Opts, b: Opts): Boolean =
      a.auth === b.auth &&
    a.headers === b.headers &&
    a.cookies === b.cookies
  }

  implicit val optsShow: Show[Opts] = Show.fromToString

  val empty = optsEmpty.empty
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy