>>> import cats.syntax.either._
>>> caseclass Developer(name: String, age: String, problems: Int)
>>> val invalid = DynamoFormat[Farmer].read(DynamoFormat[Developer].write(Developer("Alice", "none of your business", 99)))
>>> invalid
Left(InvalidPropertiesError(NonEmptyList(PropertyReadError(age,NoPropertyOfType(N,{S: none of your business,})), PropertyReadError(farm,MissingProperty))))
>>> invalid.leftMap(cats.Show[error.DynamoReadError].show)
Left('age': not of type: 'N' was '{S: none of your business,}', 'farm': missing)
Type class for defining serialisation to and from DynamoDB's
AttributeValue
Also supports automatic derivation for case classes
and for sealed trait + case object hierarchies
Problems reading a value are detailed
Optional properties are defaulted to None
Custom formats can often be most easily defined using DynamoFormat.coercedXmap, DynamoFormat.xmap or DynamoFormat.iso