Decoding and Encoding Basics

There are a few types of methods for encoding and decoding documented below, please see the API documentation for decoding and encoding for more details.

Normally when decoding you are required to pass the data and an optional namespace, however some data sources may provide default data, such as from system properties, environment variables or typesafe config. These all extend the trait DecodeFromDefaultSource which includes a set of decode methods which do not require data to be passed.

Advanced Examples

Extruder includes some default implementations for Either and EitherT, as well as being able to implicitly derive typeclasses from cats when you import cats.instances.all._. The example belore shows how this is possible:

import cats.data.EitherT
import cats.effect.IO
import extruder.cats.effect.EffectValidation
import extruder.core._
import extruder.data._
import extruder.map._
import scala.util.Try
import cats.instances.all._

decodeF[IO, String](List("a"), Map("a" -> "b")) // returns IO("b")
decodeF[Try, String](List("a"), Map("a" -> "b")) // returns Try("b")

// Type alias for EffectValidation monad transformer
type EitherTIO[A] = EffectValidation[IO, A]
decodeF[EitherTIO, String](List("a"), Map("a" -> "b")) // returns EitherT[IO, ValidationErrors, String](IO(Right("b")))

Implementing Your Own Target Monads

As mentioned in Concepts, Extruder allows you to specify target monads for your desired return types. Type classes can be created implicitly