Почему pureconfig не находит моих неявных читателей? - PullRequest
1 голос
/ 23 мая 2019

Я использую double для кодирования логического значения в файле конфигурации.PureConfig не находит способ разыграть его при чтении конфигурации.


Исходный вопрос (см. Редактирование ниже).

Вот некоторый код для воспроизведения поведения.

import com.typesafe.config.ConfigFactory
import pureconfig.ConfigReader
import pureconfig.generic.auto._

object Main {
  def main(args: Array[String]): Unit = {
    println(pureconfig.loadConfig[BooleanTest](ConfigFactory.parseString("a = 1")))
  }
}

case class BooleanTest(a: Boolean)

object ConfigImplicits {
  implicit val myBooleanReader: ConfigReader[Boolean] = ConfigReader[Double].map { n => n > 0}
}

Здесь я ожидаю, что мой код напечатает экземпляр BooleanTest.Вместо этого я получил ConvertFailure:

Left(ConfigReaderFailures(ConvertFailure(WrongType(NUMBER,Set(BOOLEAN)),None,a),List()))

Один из способов исправить это - добавить import ConfigImplicits._ непосредственно перед вызовом функции loadConfig.Однако, как вы можете предположить, мой код на самом деле является частью более крупного проекта, и добавление import в настоящий проект не исправляет мою ошибку.

Есть ли у вас какие-либо намеки на то, что может быть не так?

Добрый, Алексис.


Редактировать:

После комментариев от Thilo представляется логичным добавить оператор import.

Ниже приведена обновленная версия кода, которая включает оператор import, но при этом выдает ту же ошибку ...

Измените функцию main на:

def main(args: Array[String]): Unit = {
  println(ConfigUtils.loadConfig[BooleanTest]("a = 1"))
}

И объявите объект ConfigUtils следующим образом:

object ConfigUtils {
  def loadConfig[A : ConfigReader](str: String) : ConfigReader.Result[A] = {
    import ConfigImplicits._
    val config = ConfigFactory.parseString(str)
    pureconfig.loadConfig[A](config)
  }
}

Запустите код, и вы получите ту же ошибку, что и ранее: ConvertFailure(WrongType(NUMBER,Set(BOOLEAN))

Почему pureconfig не использует мое неявное myBooleanReader разобрать эту конфигурацию?

Добрый день, Алексис.

...