Custom type serialization
So far, we have only tried to serialize and deserialize simple types. What if we wanted to decode the language field in the repository array to an enumeration rather than a string? We might, for instance, define the following enumeration:
scala> object Language extends Enumeration { val Scala, Java, JavaScript = Value } defined object Language
Casbah lets us define custom serializers tied to a specific Scala type: we can inform Casbah that whenever it encounters an instance of the Language.Value type in a DBObject, the instance should be passed through a custom transformer that will convert it to, for instance, a string, before writing it to the database.
To define a custom serializer, we need to define a class that extends the Transformer trait. This trait exposes a single method, transform(o:AnyRef):AnyRef. Let's define a LanguageTransformer trait that transforms from Language.Value to String:
scala> import org.bson.{BSON, Transformer} import org.bson...