Я использую 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
разобрать эту конфигурацию?
Добрый день, Алексис.