Package

org

scanamo

Permalink

package scanamo

Visibility
  1. Public
  2. All

Type Members

  1. trait DerivedDynamoFormat extends AnyRef

    Permalink
  2. sealed abstract class DynamoArray extends Product with Serializable

    Permalink

    A DynamoArray is a pure representation of an array of AttributeValues

  3. trait DynamoFormat[T] extends AnyRef

    Permalink

    Type class for defining serialisation to and from DynamoDB's AttributeValue

    Type class for defining serialisation to and from DynamoDB's AttributeValue

    >>> val listOptionFormat = DynamoFormat[List[Option[Int]]]
    >>> listOptionFormat.read(listOptionFormat.write(List(Some(1), None, Some(3))))
    Right(List(Some(1), None, Some(3)))
    
    Also supports automatic and semi-automatic derivation for case classes
    >>> import org.scanamo.auto._
    >>>
    >>> case class Farm(animals: List[String])
    >>> case class Farmer(name: String, age: Long, farm: Farm)
    >>> val farmerF = DynamoFormat[Farmer]
    >>> farmerF.read(farmerF.write(Farmer("McDonald", 156L, Farm(List("sheep", "cow")))))
    Right(Farmer(McDonald,156,Farm(List(sheep, cow))))

    and for sealed trait + case object hierarchies

    >>> sealed trait Animal
    >>> case object Aardvark extends Animal
    >>> case object Zebra extends Animal
    >>> case class Pet(name: String, animal: Animal)
    >>> val petF = DynamoFormat[Pet]
    >>> petF.read(petF.write(Pet("Amy", Aardvark)))
    Right(Pet(Amy,Aardvark))
    
    >>> petF.read(petF.write(Pet("Zebediah", Zebra)))
    Right(Pet(Zebediah,Zebra))

    Problems reading a value are detailed

    >>> import cats.syntax.either._
    
    >>> case class 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((age,NoPropertyOfType(N,DynString(none of your business))), (farm,MissingProperty))))
    
    >>> invalid.leftMap(cats.Show[error.DynamoReadError].show)
    Left('age': not of type: 'N' was 'DynString(none of your business)', 'farm': missing)

    Custom formats can often be most easily defined using DynamoFormat.coercedXmap, DynamoFormat.xmap or DynamoFormat.iso

  4. sealed abstract class DynamoObject extends Product with Serializable

    Permalink

    A DynamoObject is a map of strings to values that can be embedded into an AttributeValue.

  5. sealed abstract class DynamoValue extends Product with Serializable

    Permalink

    A DynamoValue is a pure representation of an AttributeValue from the AWS SDK.

  6. trait EnumDynamoFormat extends LowPriorityDynamoFormat

    Permalink

    prop> sealed trait Animal
    prop> case object Aardvark extends Animal
    prop> case object Hippopotamus extends Animal
    prop> case object Zebra extends Animal
    
    prop> import org.scalacheck._
    prop> implicit val arbitraryAnimal: Arbitrary[Animal] = Arbitrary(Gen.oneOf(List(Aardvark, Hippopotamus, Zebra)))
    
    prop> (a: Animal) =>
        | DynamoFormat[Animal].read(DynamoFormat[Animal].write(a)) == Right(a)
    >>> DynamoFormat[Animal].write(Zebra).asString
    Some(Zebra)
  7. abstract class EnumerationDynamoFormat[T] extends DynamoFormat[T]

    Permalink
  8. trait LowPriorityDynamoFormat extends AnyRef

    Permalink

Value Members

  1. package Derivation

    Permalink
  2. object DynamoArray extends Serializable

    Permalink
  3. object DynamoFormat extends EnumDynamoFormat

    Permalink
  4. object DynamoObject extends Serializable

    Permalink
  5. object DynamoValue extends Serializable

    Permalink
  6. package auto

    Permalink

    Fully automatic format derivation.

    Fully automatic format derivation.

    Importing the contents of this package object provides org.scanamo.DynamoFormat instances for case classes (if all members have instances)

  7. package error

    Permalink
  8. package export

    Permalink
  9. package semiauto

    Permalink

    Semi-automatic format derivation.

    Semi-automatic format derivation.

    This object provides helpers for creating org.scanamo.DynamoFormat instances for case classes

    Typical usage will look like the following:

    import org.scanamo.semiauto._
    
    case class Bear(name: String, favouriteFood: String)
    object Bear {
      implicit val formatBear: DynamoFormat[Bear] = deriveDynamoFormat[Bear]
    }

Ungrouped