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

spinoco.protocol.http.header.value.HttpOrigin.scala Maven / Gradle / Ivy

The newest version!
package spinoco.protocol.http.header.value

import scodec.Codec
import scodec.codecs._
import spinoco.protocol.http.codec.helper._
import spinoco.protocol.http.HostPort
import spinoco.protocol.common.codec._
import spinoco.protocol.common.Terminator


sealed trait HttpOrigin

object HttpOrigin {

  case object Any extends HttpOrigin

  sealed case class One(scheme: String, host: Option[HostPort]) extends HttpOrigin

  val oneCodec: Codec[One] = {
    (ignoreWS ~> terminated(asciiToken, Terminator.constantString1("://")) ~ orEmpty(HostPort.codec))
      .xmap[One](One.apply _ tupled, one => one.scheme -> one.host)
      .withToString("HttpOrigin.One")
  }

  val codec : Codec[HttpOrigin] = {
    choice(
      starCodec.xmap[HttpOrigin.Any.type](_ => HttpOrigin.Any, _ => ()).upcast
      , oneCodec.upcast
    )
  }


}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy