| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package controllers
- import org.mongodb.scala.{MongoClient,MongoDatabase};
- import org.mongodb.scala.bson.codecs.Macros._
- import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY;
- import org.bson.codecs.configuration.CodecRegistries.{fromRegistries, fromProviders, fromCodecs}
- import org.bson.codecs.{Codec,DecoderContext,EncoderContext}
- import org.bson.types.ObjectId
- import org.bson.{BsonWriter,BsonReader}
- import models._
- object MongoDB {
- private def encoderCodec[T](cls: Class[T]): Codec[T] = new Codec[T] {
- def decode(reader: BsonReader, decoderContext: DecoderContext): T = throw new UnsupportedOperationException()
- def encode(writer: BsonWriter, value: T, encoderContext: EncoderContext) = writer.writeString(cls.getSimpleName)
- def getEncoderClass(): Class[T] = cls
- }
- val codecRegistry = fromRegistries(
- fromProviders(classOf[Food]),
- fromCodecs(encoderCodec[Mass](classOf[Mass]),
- encoderCodec[Volume](classOf[Volume]),
- encoderCodec[Number](classOf[Number]),
- new Codec[Measure] {
- def decode(reader: BsonReader, decoderContext: DecoderContext): Measure =
- reader.readString() match {
- case "Mass" => Mass()
- case "Volume" => Volume()
- case "Number" => Number()
- case other: String => throw new RuntimeException(s"Did not recognize measure string: $other")
- }
- def encode(writer: BsonWriter, value: Measure, encoderContext: EncoderContext) = throw new UnsupportedOperationException()
- def getEncoderClass(): Class[Measure] = classOf[Measure]
- }),
- DEFAULT_CODEC_REGISTRY
- )
- val con: MongoDatabase = MongoClient.apply()
- .getDatabase("recipes")
- .withCodecRegistry(MongoDB.codecRegistry)
- }
|