All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.foursquare.rogue.spindle.SpindleRogue.scala Maven / Gradle / Ivy

// Copyright 2014 Foursquare Labs Inc. All Rights Reserved.

package com.foursquare.rogue.spindle

import com.foursquare.field.Field
import com.foursquare.rogue.{BSONType, Rogue}
import com.foursquare.spindle.{Enum, Record, MetaRecord}

trait SpindleRogue {
  implicit def enumFieldToSpindleEnumQueryField[M <: MetaRecord[_, _], F <: Enum[F]](f: Field[F, M]): SpindleEnumQueryField[M, F] =
    new SpindleEnumQueryField(f)
  implicit def enumListFieldToSpindleEnumListQueryField[M <: MetaRecord[_, _], F <: Enum[F]](f: Field[Seq[F], M]): SpindleEnumListQueryField[M, F] =
    new SpindleEnumListQueryField(f)
  implicit def enumFieldToSpindleEnumModifyField[M <: MetaRecord[_, _], F <: Enum[F]](f: Field[F, M]): SpindleEnumModifyField[M, F] =
    new SpindleEnumModifyField(f)  
  implicit def enumFieldToSpindleEnumListModifyField[M <: MetaRecord[_, _], F <: Enum[F]](f: Field[Seq[F], M]): SpindleEnumListModifyField[M, F] =
    new SpindleEnumListModifyField(f)  

  implicit def embeddedFieldToSpindleEmbeddedRecordQueryField[
      R <: Record[_],
      MM <: MetaRecord[_, _]
  ](
      f: Field[R, MM]
  ): SpindleEmbeddedRecordQueryField[R, MM] = new SpindleEmbeddedRecordQueryField(f)

  implicit def embeddedFieldToSpindleEmbeddedRecordModifyField[
      R <: Record[_],
      MM <: MetaRecord[_, _]
  ](
      f: Field[R, MM]
  ): SpindleEmbeddedRecordModifyField[R, MM] = new SpindleEmbeddedRecordModifyField(f)

  implicit def embeddedListFieldToSpindleEmbeddedRecordListQueryField[
      R <: Record[_],
      MM <: MetaRecord[_, _]
  ](
      f: Field[Seq[R], MM]
  ): SpindleEmbeddedRecordListQueryField[R, MM] = new SpindleEmbeddedRecordListQueryField(f)

  implicit def embeddedListFieldToSpindleEmbeddedRecordListModifyField[
      R <: Record[_],
      MM <: MetaRecord[_, _]
  ](
      f: Field[Seq[R], MM]
  ): SpindleEmbeddedRecordListModifyField[R, MM] = new SpindleEmbeddedRecordListModifyField(f)

  class SpindleRecordIsBSONType[R <: Record[R]] extends BSONType[R] {
    private val serializer = new SpindleRogueWriteSerializer
    override def asBSONObject(v: R): AnyRef = serializer.toDBObject(v)
  }

  object _SpindleRecordIsBSONType extends SpindleRecordIsBSONType[Nothing]

  implicit def SpindleRecordIsBSONType[R <: Record[R]]: BSONType[R] = _SpindleRecordIsBSONType.asInstanceOf[BSONType[R]]
}

object SpindleRogue extends Rogue with SpindleRogue




© 2015 - 2025 Weber Informatics LLC | Privacy Policy