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...