Note that this could be rewritten as follows for a better readability:

```scala
def optionWithNull[T](implicit rds: Reads[T]): Reads[Option[T]] = Reads {
  case JsNull => JsSuccess(None)
  case js => rds.reads(js).map(Some(_))
}
```

You should also mention in the doc that if the field is missing from the JSON value this `Reads` will yield a `JsError(…)` rather than a `JsSuccess(None)`