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

dsl.criteria.ValueBuilder.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013 Steve Vickers
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package reactivemongo.extensions.dsl.criteria

import scala.language.implicitConversions

import reactivemongo.bson._

/**
 * The '''ValueBuilder'' type is a model of the ''type class'' pattern used to
 * produce a ''T''-specific [[reactivemongo.bson.BSONValue]] instance.
 *
 * @author svickers
 *
 */
trait ValueBuilder[T] {
  def bson(v: T): BSONValue;
}

/**
 * The '''ValueBuilder''' companion object defines common
 * [[reactivemongo.extensions.dsl.criteria.ValueBuilder]] ''type classes''
 * available for any project.  Types not known to the library can define
 * [[reactivemongo.extensions.dsl.criteria.ValueBuilder]] instances as needed
 * to extend the DSL.
 */
object ValueBuilder {
  implicit def bsonValueIdentityValue[T <: BSONValue]: ValueBuilder[T] =
    new ValueBuilder[T] {
      override def bson(v: T): T = v;
    }

  implicit object DateTimeValue
      extends ValueBuilder[java.util.Date] {
    override def bson(v: java.util.Date): BSONValue =
      BSONDateTime(v.getTime);
  }

  implicit object BooleanValue
      extends ValueBuilder[Boolean] {
    override def bson(v: Boolean): BSONValue =
      BSONBoolean(v);
  }

  implicit object DoubleValue
      extends ValueBuilder[Double] {
    override def bson(v: Double): BSONValue =
      BSONDouble(v);
  }

  implicit object IntValue
      extends ValueBuilder[Int] {
    override def bson(v: Int): BSONValue =
      BSONInteger(v);
  }

  implicit object LongValue
      extends ValueBuilder[Long] {
    override def bson(v: Long): BSONValue =
      BSONLong(v);
  }

  implicit object StringValue
      extends ValueBuilder[String] {
    override def bson(v: String): BSONValue =
      BSONString(v);
  }

  implicit object SymbolValue
      extends ValueBuilder[Symbol] {
    override def bson(v: Symbol): BSONValue =
      BSONSymbol(v.name);
  }

  implicit object TimestampValue
      extends ValueBuilder[java.sql.Timestamp] {
    override def bson(v: java.sql.Timestamp): BSONValue =
      BSONTimestamp(v.getTime);
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy