Skip to content

Commit

Permalink
Add a combine method to ConfigErrors
Browse files Browse the repository at this point in the history
  • Loading branch information
cb372 committed Aug 2, 2018
1 parent 9a3457e commit 0c3f152
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
@@ -1,6 +1,7 @@
package ciris.cats.api

import cats.Show
import cats.Semigroup
import ciris._

trait CirisInstancesForCats {
Expand Down Expand Up @@ -30,4 +31,9 @@ trait CirisInstancesForCats {

implicit def showSecret[A]: Show[Secret[A]] =
Show.fromToString

implicit val semigroupConfigErrors: Semigroup[ConfigErrors] = new Semigroup[ConfigErrors] {
def combine(first: ConfigErrors, second: ConfigErrors) =
ConfigErrors.combine(first, second)
}
}
16 changes: 16 additions & 0 deletions modules/core/shared/src/main/scala/ciris/ConfigErrors.scala
Expand Up @@ -170,4 +170,20 @@ object ConfigErrors {
*/
def right[A](value: A): Either[ConfigErrors, A] =
Right(value)

/**
* Creates a new [[ConfigErrors]] instance containing all the errors of
* both `first` and `second`, in that order.
*
* @param first the first [[ConfigErrors]]
* @param second the second [[ConfigErrors]]
* @return a new [[ConfigErrors]] instance
* @example {{{
* scala> ConfigErrors.combine(ConfigErrors(ConfigError("error1")), ConfigErrors(ConfigError("error2")))
* res0: ConfigErrors = ConfigErrors(ConfigError(error1), ConfigError(error2))
* }}}
*/
def combine(first: ConfigErrors, second: ConfigErrors): ConfigErrors =
new ConfigErrors(first.toVector ++ second.toVector)

}
Expand Up @@ -75,5 +75,20 @@ final class CirisInstancesForCatsSpec extends PropertySpec {
) shouldBe "Secret(40bd001)"
}
}

"providing Semigroup instances" should {
"be able to provide all required instances" in {
import _root_.cats.Semigroup
import _root_.cats.implicits._
import ciris._
import ciris.api._
import ciris.cats._

val first = ConfigErrors(ConfigError("a"), ConfigError("b"))
val second = ConfigErrors(ConfigError("c"), ConfigError("d"))
val combined = Semigroup[ConfigErrors].combine(first, second)
combined.messages shouldBe ConfigErrors(ConfigError("a"), ConfigError("b"), ConfigError("c"), ConfigError("d")).messages
}
}
}
}

0 comments on commit 0c3f152

Please sign in to comment.