Загрузка разных файлов из каталога ресурсов через Pureconfig

#scala #config #typesafe #pureconfig

#scala #конфигурация #typesafe #чистая настройка #pureconfig

Вопрос:

У меня есть несколько файлов в папке ресурсов, и у меня есть класс сопоставления для того же. Теперь все, что я хочу, это загрузить каждый файл в другой класс конфигурации с помощью pureconfig. Есть ли какой-либо способ загрузить его, указав только имя папки ресурсов.

  - src
    - main
        - resources
            - configs
                - conf1.json
                - conf2.json
  

Я хочу что-то вроде этого

 ConfigSource.resources("configs")
  

и он должен вернуть

 List<Conf>
  

Текущий подход выглядит примерно так

 def main(args: Array[String]): Unit = {
    implicit def hint[A]: ProductHint[A] =
      ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))

    val resourceFiles = getResourceFolderFiles("configs")
    val configs = new ListBuffer[SampleConfig];
    resourceFiles.foreach(file =>
      configs.append(
        ConfigSource
          .file(file)
          .load[SampleConfig]
          .getOrElse(null)))
    println(configs.size)
  }

  private def getResourceFolderFiles(folder: String): Array[File] = {
    val loader = Thread.currentThread.getContextClassLoader
    val url = loader.getResource(folder)
    val path = url.getPath
    new File(path).listFiles
  }
  

Есть ли какой-нибудь самый простой способ?

Комментарии:

1. Что вы уже пробовали? Пожалуйста, поделитесь своей лучшей попыткой, даже если она не сработает

2. @IvanStanislavciuc обновлен в вопросе

Ответ №1:

 implicit def hint[A]: ProductHint[A] =
  ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))


val sampleConfigList =
  Try(Thread.currentThread().getContextClassLoader.getResource("configs").getPath)
    .flatMap(filePath => Try(new File(filePath).listFiles().toList))
    .map(fileList =>
      fileList.flatMap(file => ConfigSource.file(file).load[SampleConfig].toOption)
    )
    .getOrElse(List.empty[SampleConfig])
  

Комментарии:

1. Предоставляет ли Pureconfig метод для чтения непосредственно из папки?

2. Нет. Это не так.

3. Я не думаю, что потребуются какие-либо изменения (честно говоря, я не помню дни scala 2.11). Если ваш данный код работал, то это тоже должно сработать.