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

scalafix.internal.config.MetaconfigPendingUpstream.scala Maven / Gradle / Ivy

package scalafix.internal.config

import scala.collection.immutable.Seq
import metaconfig.Conf
import metaconfig.ConfDecoder
import metaconfig.ConfError
import metaconfig.Configured
import metaconfig.internal.ConfGet

// TODO(olafur) contribute upstream to metaconfig.
object MetaconfigPendingUpstream {
  def flipSeq[T](lst: Seq[Configured[T]]): Configured[Seq[T]] = {
    lst.foldLeft(Configured.Ok(Seq.empty[T]): Configured[Seq[T]]) {
      case (res, configured) =>
        res.product(configured).map { case (a, b) => b +: a }
    }
  }
  def getKey[T](conf: Conf.Obj, path: String, extraNames: String*)(
      implicit ev: ConfDecoder[T]): Configured[T] = {
    ConfGet.getKey(conf, path +: extraNames) match {
      case Some(value) => ev.read(value)
      case None => ConfError.missingField(conf, path).notOk
    }
  }

  implicit class XtensionConfScalafix(conf: Conf) {
    def getField[T: ConfDecoder](e: sourcecode.Text[T]): Configured[T] =
      conf.getOrElse(e.source)(e.value)
  }
  implicit class XtensionConfiguredScalafix(`_`: Configured.type) {
    def fromEither[T](either: Either[String, T]): Configured[T] =
      either.fold(ConfError.message(_).notOk, Configured.ok)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy