Skip to content

Commit

Permalink
Add writes for schema root
Browse files Browse the repository at this point in the history
  • Loading branch information
edgarmueller committed Sep 2, 2018
1 parent c40cf9e commit e5935f6
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.eclipsesource.schema.internal.draft4

import com.eclipsesource.schema.{SchemaArray, SchemaInteger, SchemaNumber, SchemaObject, SchemaString, SchemaTuple, SchemaVersion}
import com.eclipsesource.schema.{SchemaArray, SchemaInteger, SchemaNumber, SchemaObject, SchemaRoot, SchemaString, SchemaTuple, SchemaVersion}
import com.eclipsesource.schema.internal.Keywords
import com.eclipsesource.schema.internal.constraints.Constraints._
import com.eclipsesource.schema.internal.draft4.constraints._
import com.eclipsesource.schema.internal.serialization.SchemaWrites
import play.api.libs.json.{Json, OWrites}
import play.api.libs.json.{Json, OWrites, Writes}

trait SchemaWrites4 extends SchemaWrites { self: SchemaVersion =>

Expand All @@ -22,6 +22,7 @@ trait SchemaWrites4 extends SchemaWrites { self: SchemaVersion =>
asJsObject(Keywords.Any.Not, not)
}

override lazy val rootWrites: Writes[SchemaRoot] = Default.rootWrites
override lazy val objectWrites: OWrites[SchemaObject] = Default.objectWrites(objectConstraintWrites)
override lazy val stringWrites: OWrites[SchemaString] = Default.stringWrites(stringConstraintWrites)
override lazy val integerWrites: OWrites[SchemaInteger] = Default.integerWrites(numberConstraintWrites)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.eclipsesource.schema.internal.Keywords
import com.eclipsesource.schema.internal.constraints.Constraints._
import com.eclipsesource.schema.internal.draft7.constraints._
import com.eclipsesource.schema.internal.serialization.SchemaWrites
import com.eclipsesource.schema.{SchemaArray, SchemaInteger, SchemaNumber, SchemaObject, SchemaString, SchemaTuple, SchemaVersion}
import play.api.libs.json.{Json, OWrites}
import com.eclipsesource.schema.{SchemaArray, SchemaInteger, SchemaNumber, SchemaObject, SchemaRoot, SchemaString, SchemaTuple, SchemaVersion}
import play.api.libs.json.{Json, OWrites, Writes}

trait SchemaWrites7 extends SchemaWrites { self: SchemaVersion =>

Expand All @@ -26,6 +26,7 @@ trait SchemaWrites7 extends SchemaWrites { self: SchemaVersion =>
asJsObject(Keywords.Any.Else, _else)
}

override lazy val rootWrites: Writes[SchemaRoot] = Default.rootWrites
override lazy val objectWrites: OWrites[SchemaObject] = Default.objectWrites(objectConstraintWrites)
override lazy val stringWrites: OWrites[SchemaString] = Default.stringWrites(stringConstraintWrites)
override lazy val integerWrites: OWrites[SchemaInteger] = Default.integerWrites(numberConstraintWrites)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ trait SchemaWrites { self: SchemaVersion =>
case n: CompoundSchemaType => compoundWrites.writes(n)
case s: SchemaMap => schemaMapWriter.writes(s)
case v: SchemaValue => v.value
case r: SchemaRoot => rootWrites.writes(r)
case other => additionalWrites.writes(other)
}

def additionalWrites: OWrites[SchemaType] = OWrites[SchemaType](other =>
throw new RuntimeException(s"Unknown schema type encountered.\n$other")
throw new RuntimeException(s"Unknown schema type encountered: $other")
)
def anyConstraintWrites: OWrites[AnyConstraints]
def rootWrites: Writes[SchemaRoot]
def stringWrites: OWrites[SchemaString]
def numberWrites: OWrites[SchemaNumber]
def integerWrites: OWrites[SchemaInteger]
Expand Down Expand Up @@ -75,6 +77,12 @@ trait SchemaWrites { self: SchemaVersion =>
def emptyJsonObject: JsObject = Json.obj()

object Default {

def rootWrites: Writes[SchemaRoot] =
Writes[SchemaRoot] { schemaRoot =>
Json.toJson(schemaRoot.schema)
}

// TODO: default is missing
def objectWrites(objectConstraintWrites: OWrites[ObjectConstraints]): OWrites[SchemaObject] =
OWrites[SchemaObject] { schemaObj =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ class SchemaWritesSpec extends Specification {
)
}

"write root" in {
Json.toJson(
SchemaRoot(Some(Version4), SchemaNumber(NumberConstraints4()))
) must beEqualTo(
Json.obj("type" -> "number")
)
}

"write array" in {
Json.toJson(SchemaArray(SchemaNumber(NumberConstraints4()), ArrayConstraints4())) must beEqualTo(
Json.obj("items" -> Json.obj("type" -> "number"))
Expand Down

0 comments on commit e5935f6

Please sign in to comment.