Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions src/main/scala/spray/json/AdditionalFormats.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,7 @@ package spray.json
/**
* Provides additional JsonFormats and helpers
*/
trait AdditionalFormats {

implicit object JsValueFormat extends JsonFormat[JsValue] {
def write(value: JsValue) = value
def read(value: JsValue) = value
}
trait AdditionalFormats extends AdditionalFormats.LowPriorityImplicits {

implicit object RootJsObjectFormat extends RootJsonFormat[JsObject] {
def write(value: JsObject) = value
Expand Down Expand Up @@ -114,4 +109,17 @@ trait AdditionalFormats {
}
}

}
}

object AdditionalFormats {

trait LowPriorityImplicits {

implicit object JsValueFormat extends JsonFormat[JsValue] {
def write(value: JsValue) = value
def read(value: JsValue) = value
}

}

}
17 changes: 17 additions & 0 deletions src/test/scala/spray/json/AdditionalFormatsSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,21 @@ class AdditionalFormatsSpec extends Specification {
"""{"id":1,"name":"a","foos":[{"id":2,"name":"b","foos":[{"id":3,"name":"c"}]},{"id":4,"name":"d"}]}""".parseJson
}
}

"JsValueFormat" should {
import DefaultJsonProtocol._

class Box[-T]
implicit def box[T : JsonFormat]: Box[T] = new Box

"not cause ambiguity when summoning Box[JsObject]" in {
implicitly[Box[JsObject]]
true mustEqual true // just checking that it compiles
}

"not cause ambiguity when summoning Box[JsArray]" in {
implicitly[Box[JsArray]]
true mustEqual true // just checking that it compiles
}
}
}