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

org.apache.cxf.config.ObjectReader.scala Maven / Gradle / Ivy

package org.apache.cxf.config

import com.typesafe.config.Config
import org.apache.cxf.binding.soap.{Soap11, Soap12, SoapVersion}

import scala.collection.JavaConversions._

trait ConfigReader[T] {
  def apply(path: String, config: Config): T
}

trait StringReader[T] {
  def apply(valueStr: String): T
}

object StringReader {
  implicit object SoapVersionReader extends StringReader[SoapVersion] {
    def apply(valueStr: String): SoapVersion = valueStr match {
      case "1.1" => Soap11.getInstance()
      case "1.2" => Soap12.getInstance()
      case _ => throw new Exception(s"SOAP version $valueStr is not supported")
    }
  }
}

object ConfigReader  {
  implicit object StringReader extends ConfigReader[String] {
    def apply(path: String, config: Config): String = config.getString(path)
  }
  implicit object StringSeqReader extends ConfigReader[Seq[String]] {
    def apply(path: String, config: Config): Seq[String] =
      config.getStringList(path)
  }

  implicit object ConfigReader extends ConfigReader[Config] {
    def apply(path: String, config: Config): Config = config.getConfig(path)
  }

  /** Given a `StringReader[T]`, creates a `ConfigReader[T]` */
  implicit def customConfigReader[T: StringReader]: ConfigReader[T] = new ConfigReader[T] {
    override def apply(path: String, config: Config): T = {
      val reader = implicitly[StringReader[T]]
      reader(config.getString(path))
    }
  }

  /** Given a `StringReader[T]`, creates a `ConfigReader[Seq[T]]` */
  implicit def customConfigSeqReader[T: StringReader]: ConfigReader[Seq[T]] = new ConfigReader[Seq[T]] {
    def apply(path: String, config: Config): Seq[T] = {
      val reader = implicitly[StringReader[T]]
      config.getStringList(path).map(reader.apply)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy