Skip to content

Commit

Permalink
Added contravariant instance for ConfigDecoder
Browse files Browse the repository at this point in the history
  • Loading branch information
dimitarg committed Oct 16, 2021
1 parent 8b92d45 commit dc2fbd5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
11 changes: 10 additions & 1 deletion modules/core/src/main/scala/ciris/ConfigDecoder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

package ciris

import cats.{MonadError, Show}
import cats.{MonadError, Show, Contravariant}
import cats.implicits._
import scala.annotation.tailrec
import scala.concurrent.duration.{Duration, FiniteDuration}
Expand Down Expand Up @@ -369,4 +369,13 @@ object ConfigDecoder {
go(f(b))
}
}

/**
* @group Instances
*/
implicit final def configDecoderContravariant[A]: Contravariant[ConfigDecoder[*, A]] =
new Contravariant[ConfigDecoder[*, A]] {
override def contramap[I, II](fa: ConfigDecoder[I, A])(f: II => I): ConfigDecoder[II, A] =
ConfigDecoder[II].map(f).mapEither(fa.decode)
}
}
7 changes: 7 additions & 0 deletions modules/core/src/test/scala/ciris/ConfigDecoderSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import cats.laws.discipline.MonadErrorTests
import org.scalacheck.Gen
import scala.concurrent.duration.{Duration, FiniteDuration}
import scala.util.Try
import cats.laws.discipline.ContravariantTests
import cats.Contravariant

final class ConfigDecoderSpec extends BaseSpec {
test("ConfigDecoder.as") {
Expand Down Expand Up @@ -220,6 +222,11 @@ final class ConfigDecoderSpec extends BaseSpec {
MonadErrorTests[ConfigDecoder[String, *], ConfigError].monadError[String, String, String]
)

checkAll(
"ConfigDecoder",
ContravariantTests[ConfigDecoder[*, String]].contravariant[String, String, String]
)

test("ConfigDecoder.short.success") {
forAll { (short: Short) =>
assert(ConfigDecoder[String, Short].decode(None, short.toString) === short.asRight)
Expand Down

0 comments on commit dc2fbd5

Please sign in to comment.