Object

reactivemongo.api.bson.Macros

Annotations

Related Doc: package Macros

Permalink

object Annotations

Annotations to use on case classes that are being processed by macros.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Annotations
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final class DefaultValue[T] extends Annotation with StaticAnnotation

    Permalink

    Indicates a default value for a class property, when there is no corresponding BSON value when reading.

    Indicates a default value for a class property, when there is no corresponding BSON value when reading.

    It enables a behaviour similar to MacroOptions.ReadDefaultValues, without requiring the define a global default value for the property.

    import reactivemongo.api.bson.BSONDocument
    import reactivemongo.api.bson.Macros,
      Macros.Annotations.DefaultValue
    
    case class Foo(
      title: String,
      @DefaultValue(1.23D) score: Double)
    
    val reader = Macros.reader[Foo]
    
    reader.readTry(BSONDocument("title" -> "Bar")) // No BSON 'score'
    // Success: Foo(title = "Bar", score = 1.23D)
    Annotations
    @param()
  2. final class Flatten extends Annotation with StaticAnnotation

    Permalink

    Indicates that if a property is represented as a document itself, the document fields are directly included in top document, rather than nesting it.

    Indicates that if a property is represented as a document itself, the document fields are directly included in top document, rather than nesting it.

    import reactivemongo.api.bson.Macros.Annotations.Flatten
    
    case class Range(start: Int, end: Int)
    
    case class LabelledRange(
      name: String,
      @Flatten range: Range)
    
    val flattened = reactivemongo.api.bson.BSONDocument(
      "name" -> "foo", "start" -> 0, "end" -> 1)
    
    // Rather than:
    // BSONDocument("name" -> "foo", "range" -> BSONDocument(
    //   "start" -> 0, "end" -> 1))
    Annotations
    @param()
  3. final class Ignore extends Annotation with StaticAnnotation

    Permalink

    Indicates that the annotated field must not be serialized to BSON.

    Indicates that the annotated field must not be serialized to BSON. Annotation @transient can also be used to achieve the same purpose.

    If the annotate field must be read, a default value must be defined, either from the field default value, or using the annotation DefaultValue (specific to BSON).

    Annotations
    @param()
  4. final class Key extends Annotation with StaticAnnotation

    Permalink

    Specify a key different from field name in your case class.

    Specify a key different from field name in your case class. Convenient to use when you'd like to leverage mongo's _id index but don't want to actually use _id in your code.

    import reactivemongo.api.bson.Macros.Annotations.Key
    
    case class Website(@Key("_id") url: String)

    Generated handler will map the url field in your code to _id field in BSON

    Annotations
    @param()
  5. final class NoneAsNull extends Annotation with StaticAnnotation

    Permalink

    Indicates that if an Option property is empty, it will be represented by BSONNull rather than being omitted.

    Indicates that if an Option property is empty, it will be represented by BSONNull rather than being omitted.

    import reactivemongo.api.bson.Macros.Annotations.NoneAsNull
    
    case class Foo(
      title: String,
      @NoneAsNull description: Option[String])
    Annotations
    @param()
  6. final class Reader[T] extends Annotation with StaticAnnotation

    Permalink

    Indicates a BSON reader to be used for a specific property, possibly overriding the default one from the implicit scope.

    Indicates a BSON reader to be used for a specific property, possibly overriding the default one from the implicit scope.

    import reactivemongo.api.bson.{
      BSONDocument, BSONDouble, BSONString, BSONReader
    }
    import reactivemongo.api.bson.Macros,
      Macros.Annotations.Reader
    
    val scoreReader: BSONReader[Double] = BSONReader.collect[Double] {
      case BSONString(v) => v.toDouble
      case BSONDouble(b) => b
    }
    
    case class Foo(
      title: String,
      @Reader(scoreReader) score: Double)
    
    val reader = Macros.reader[Foo]
    
    reader.readTry(BSONDocument(
      "title" -> "Bar",
      "score" -> "1.23" // accepted by annotated scoreReader
    ))
    // Success: Foo(title = "Bar", score = 1.23D)
    Annotations
    @param()
  7. final class Writer[T] extends Annotation with StaticAnnotation

    Permalink

    Indicates a BSON writer to be used for a specific property, possibly overriding the default one from the implicit scope.

    Indicates a BSON writer to be used for a specific property, possibly overriding the default one from the implicit scope.

    import reactivemongo.api.bson.{ BSONString, BSONWriter }
    import reactivemongo.api.bson.Macros,
      Macros.Annotations.Writer
    
    val scoreWriter: BSONWriter[Double] = BSONWriter[Double] { d =>
      BSONString(d.toString) // write double as string
    }
    
    case class Foo(
      title: String,
      @Writer(scoreWriter) score: Double)
    
    val writer = Macros.writer[Foo]
    
    writer.writeTry(Foo(title = "Bar", score = 1.23D))
    // Success: BSONDocument("title" -> "Bar", "score" -> "1.23")
    Annotations
    @param()

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  10. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  11. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  12. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  13. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  14. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  15. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  16. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  17. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  18. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped