prop> (b: Boolean) => | DynamoFormat[Boolean].read(DynamoFormat[Boolean].write(b)) == cats.data.Validated.valid(b)
prop> (i: Int) => | DynamoFormat[Int].read(DynamoFormat[Int].write(i)) == cats.data.Validated.valid(i)
prop> (l: List[String]) => | DynamoFormat[List[String]].read(DynamoFormat[List[String]].write(l)) == | cats.data.Validated.valid(l)
prop> (l: Long) => | DynamoFormat[Long].read(DynamoFormat[Long].write(l)) == cats.data.Validated.valid(l)
prop> (m: Map[String, Int]) => | DynamoFormat[Map[String, Int]].read(DynamoFormat[Map[String, Int]].write(m)) == | cats.data.Validated.valid(m)
prop> (o: Option[Long]) => | DynamoFormat[Option[Long]].read(DynamoFormat[Option[Long]].write(o)) == | cats.data.Validated.valid(o)
prop> (s: String) => | DynamoFormat[String].read(DynamoFormat[String].write(s)) == cats.data.Validated.valid(s)
>>> import org.joda.time._ >>> import cats.data.Validated >>> import com.amazonaws.services.dynamodbv2.model.AttributeValue >>> implicit val jodaLongFormat = DynamoFormat.xmap[DateTime, Long]( ... l => Validated.valid(new DateTime(l).withZone(DateTimeZone.UTC)) ... )( ... _.withZone(DateTimeZone.UTC).getMillis ... ) >>> DynamoFormat[DateTime].read(new AttributeValue().withN("0")) Valid(1970-01-01T00:00:00.000Z) >>> val jodaStringFormat = DynamoFormat.xmap[LocalDate, String]( ... s => Validated.valid(LocalDate.parse(s)) ... )( ... _.toString ... ) >>> jodaStringFormat.read(jodaStringFormat.write(new LocalDate(2007, 8, 18))) Valid(2007-08-18)