Используете PureConfig с Refined?

У меня есть файл conf ниже:

connection.port = 8080
connection.interface = "127.0.0.1"

Я пытаюсь использовать refined и refined-pureconfig при чтении этого файла. У меня есть класс ниже:

import com.api.models.{Config, Connection}
import com.typesafe.config.ConfigFactory
import pureconfig.error.ConfigReaderFailures
import pureconfig.loadConfig

object Configuration {
  val config = ConfigFactory.load()

  val stuff: Either[ConfigReaderFailures, Connection] = loadConfig[Connection](config)



 stuff match {
   case Left(left) => println(left)
   case Right(right) => println(right)
 }
}

Это чтение приведенного ниже класса случая:

case class Connection(port: Int, interface: String)

Однако когда я пытаюсь скомпилировать это, я получаю следующую ошибку:

Error:(19, 79) could not find implicit value for parameter reader: pureconfig.Derivation[pureconfig.ConfigReader[com.api.models.Connection]]
  val stuff: Either[ConfigReaderFailures, Connection] = loadConfig[Connection](config)

Я правда не знаю, как создать такой неявный?


person Nespony    schedule 05.11.2018    source источник
comment
какой у вас импорт?   -  person Dominic Egger    schedule 05.11.2018
comment
Добавьте scalacOptions += "-Xmacro-settings:materialize-derivations" do your build, чтобы получить лучшие неявные подсказки. См. здесь .   -  person erip    schedule 05.11.2018
comment
Я добавил это, и нет таких же ошибок!   -  person Nespony    schedule 05.11.2018
comment
@DominicEgger - Я добавил импорт, спасибо!   -  person Nespony    schedule 05.11.2018


Ответы (1)


Скорее всего, вам не хватает импорта, вероятно, этого: import pureconfig.generic.auto._

см. https://pureconfig.github.io/docs/.

Если вас интересует, что здесь происходит, вы можете заглянуть в «вывод классов типов».

РЕДАКТИРОВАТЬ: обратите внимание, что сейчас это не имеет ничего общего с уточненными типами, поскольку ваш фрагментированный код не использует их.

person Dominic Egger    schedule 05.11.2018
comment
Я столкнулся с аналогичной проблемой, и добавление этого оператора импорта сработало для меня. Однако IDE показывает, что этот импорт не используется. Вы знаете, почему импорт так важен? - person adarsh hegde; 07.02.2019
comment
так что под IDE, я полагаю, вы имеете в виду intellij? проблемы с неявными значениями - это весьма печально. в основном у intellij есть собственный scala-компилятор для проверки вашего кодировщика, и иногда это просто неправильно (у вас даже могут быть случаи, когда intellij будет подчеркивать код красным, который отлично работает). сам импорт важен, потому что именно там определяются имплициты, которые pureconfig использует для создания декодеров для данного типа во время компиляции. - person Dominic Egger; 07.02.2019