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

io.k8s.api.networking.v1.IngressSpec.scala Maven / Gradle / Ivy

package io.k8s.api.networking.v1

import dev.hnaderi.k8s.utils._

/** IngressSpec describes the Ingress the user wishes to exist. */
final case class IngressSpec(
  defaultBackend : Option[io.k8s.api.networking.v1.IngressBackend] = None,
  ingressClassName : Option[String] = None,
  rules : Option[Seq[io.k8s.api.networking.v1.IngressRule]] = None,
  tls : Option[Seq[io.k8s.api.networking.v1.IngressTLS]] = None
) {

  /** Returns a new data with defaultBackend set to new value */
  def withDefaultBackend(value: io.k8s.api.networking.v1.IngressBackend) : IngressSpec = copy(defaultBackend = Some(value))
  /** if defaultBackend has a value, transforms to the result of function*/
  def mapDefaultBackend(f: io.k8s.api.networking.v1.IngressBackend => io.k8s.api.networking.v1.IngressBackend) : IngressSpec = copy(defaultBackend = defaultBackend.map(f))

  /** Returns a new data with ingressClassName set to new value */
  def withIngressClassName(value: String) : IngressSpec = copy(ingressClassName = Some(value))
  /** if ingressClassName has a value, transforms to the result of function*/
  def mapIngressClassName(f: String => String) : IngressSpec = copy(ingressClassName = ingressClassName.map(f))

  /** Returns a new data with rules set to new value */
  def withRules(value: Seq[io.k8s.api.networking.v1.IngressRule]) : IngressSpec = copy(rules = Some(value))
  /** Appends new values to rules */
  def addRules(newValues: io.k8s.api.networking.v1.IngressRule*) : IngressSpec = copy(rules = Some(rules.fold(newValues)(_ ++ newValues)))
  /** if rules has a value, transforms to the result of function*/
  def mapRules(f: Seq[io.k8s.api.networking.v1.IngressRule] => Seq[io.k8s.api.networking.v1.IngressRule]) : IngressSpec = copy(rules = rules.map(f))

  /** Returns a new data with tls set to new value */
  def withTls(value: Seq[io.k8s.api.networking.v1.IngressTLS]) : IngressSpec = copy(tls = Some(value))
  /** Appends new values to tls */
  def addTls(newValues: io.k8s.api.networking.v1.IngressTLS*) : IngressSpec = copy(tls = Some(tls.fold(newValues)(_ ++ newValues)))
  /** if tls has a value, transforms to the result of function*/
  def mapTls(f: Seq[io.k8s.api.networking.v1.IngressTLS] => Seq[io.k8s.api.networking.v1.IngressTLS]) : IngressSpec = copy(tls = tls.map(f))
}

object IngressSpec {

    implicit val encoder : Encoder[io.k8s.api.networking.v1.IngressSpec] = new Encoder[io.k8s.api.networking.v1.IngressSpec] {
        def apply[T : Builder](o: io.k8s.api.networking.v1.IngressSpec) : T = {
          val obj = ObjectWriter[T]()
          obj
            .write("defaultBackend", o.defaultBackend)
            .write("ingressClassName", o.ingressClassName)
            .write("rules", o.rules)
            .write("tls", o.tls)
            .build
        }
    }

    implicit val decoder: Decoder[IngressSpec] = new Decoder[IngressSpec] {
      def apply[T : Reader](t: T): Either[String, IngressSpec] = for {
          obj <- ObjectReader(t)
          defaultBackend <- obj.readOpt[io.k8s.api.networking.v1.IngressBackend]("defaultBackend")
          ingressClassName <- obj.readOpt[String]("ingressClassName")
          rules <- obj.readOpt[Seq[io.k8s.api.networking.v1.IngressRule]]("rules")
          tls <- obj.readOpt[Seq[io.k8s.api.networking.v1.IngressTLS]]("tls")
      } yield IngressSpec (
          defaultBackend = defaultBackend,
          ingressClassName = ingressClassName,
          rules = rules,
          tls = tls
        )
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy