Skip to content

Commit 13dee0a

Browse files
author
j
committed
circe 0.6.0
1 parent 1709824 commit 13dee0a

File tree

5 files changed

+47
-48
lines changed

5 files changed

+47
-48
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ resolvers ++= Seq(
1212
)
1313

1414
libraryDependencies ++= {
15-
val circeVersion = "0.5.2"
15+
val circeVersion = "0.6.0"
1616
val akkaVersion = "2.4.8"
1717

1818
Seq(

src/main/scala/org/zalando/jsonapi/json/circe/CirceJsonapiDecoders.scala

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.zalando.jsonapi.json.circe
22

3-
import cats.data.Xor
43
import io.circe._
54
import org.zalando.jsonapi.json.FieldNames
65
import org.zalando.jsonapi.model.JsonApiObject._
@@ -20,23 +19,23 @@ trait CirceJsonapiDecoders {
2019
}.toList)
2120
)
2221

23-
implicit val valueDecoder = Decoder.instance[Value](_.as[Json].map(jsonToValue))
22+
implicit val valueDecoder = Decoder.instance[Value](_.as[Json].right.map(jsonToValue))
2423

2524
implicit val attributesDecoder = Decoder.instance[Attributes](hcursor {
26-
hcursor.as[Value].flatMap {
25+
hcursor.as[Value].right.flatMap {
2726
case JsObjectValue(value)
28-
Xor.Right(value)
27+
Right(value)
2928
case _
30-
Xor.Left(DecodingFailure("only an object can be decoded to Attributes", hcursor.history))
29+
Left(DecodingFailure("only an object can be decoded to Attributes", hcursor.history))
3130
}
3231
})
3332

34-
implicit val attributeDecoder = Decoder.instance[Attribute](_.as[Attributes].map(_.head))
33+
implicit val attributeDecoder = Decoder.instance[Attribute](_.as[Attributes].right.map(_.head))
3534

3635
implicit val linksDecoder = Decoder.instance[Links](hcursor {
37-
hcursor.as[Value].flatMap {
36+
hcursor.as[Value].right.flatMap {
3837
case JsObjectValue(attributes)
39-
Xor.Right(attributes.map {
38+
Right(attributes.map {
4039
case Attribute(FieldNames.`self`, StringValue(url)) Links.Self(url)
4140
case Attribute(FieldNames.`about`, StringValue(url))
4241
Links.About(url)
@@ -49,11 +48,11 @@ trait CirceJsonapiDecoders {
4948
Links.Related(url)
5049
})
5150
case _
52-
Xor.Left(DecodingFailure("only an object can be decoded to Links", hcursor.history))
51+
Left(DecodingFailure("only an object can be decoded to Links", hcursor.history))
5352
}
5453
})
5554

56-
def jsonToData(json: Json): Xor[DecodingFailure, Data] = json match {
55+
def jsonToData(json: Json): Either[DecodingFailure, Data] = json match {
5756
case json: Json if json.isArray
5857
json.as[ResourceObjects]
5958
case json: Json if json.isObject
@@ -62,9 +61,9 @@ trait CirceJsonapiDecoders {
6261

6362
implicit val relationshipDecoder = Decoder.instance[Relationship](hcursor {
6463
for {
65-
links hcursor.downField(FieldNames.`links`).as[Option[Links]]
64+
links hcursor.downField(FieldNames.`links`).as[Option[Links]].right
6665
// TODO: there's prolly a cleaner way here. there's a circular dependency Data -> ResourceObject(s) -> Relationship(s) -> Data that's giving circe problems
67-
data hcursor.downField(FieldNames.`data`).as[Option[Json]].map(_.flatMap(jsonToData(_).toOption))
66+
data hcursor.downField(FieldNames.`data`).as[Option[Json]].right.map(_.flatMap(jsonToData(_).right.toOption)).right
6867
} yield
6968
Relationship(
7069
links = links,
@@ -75,31 +74,31 @@ trait CirceJsonapiDecoders {
7574
implicit val relationshipsDecoder = Decoder.instance[Relationships](_.as[Map[String, Relationship]])
7675

7776
implicit val jsonApiDecoder = Decoder.instance[JsonApi](hcursor {
78-
hcursor.as[Value].flatMap {
77+
hcursor.as[Value].right.flatMap {
7978
case JsObjectValue(attributes)
80-
Xor.Right(attributes.map {
79+
Right(attributes.map {
8180
case Attribute(name, value) JsonApiProperty(name, value)
8281
})
8382
case _
84-
Xor.Left(DecodingFailure("only an object can be decoded to JsonApi", hcursor.history))
83+
Left(DecodingFailure("only an object can be decoded to JsonApi", hcursor.history))
8584
}
8685
})
8786

8887
implicit val metaDecoder = Decoder.instance[Meta](hcursor {
89-
hcursor.as[Value].flatMap {
88+
hcursor.as[Value].right.flatMap {
9089
case JsObjectValue(attributes)
91-
Xor.Right(attributes.map {
90+
Right(attributes.map {
9291
case Attribute(name, value) name -> value
9392
}.toMap)
9493
case _
95-
Xor.Left(DecodingFailure("only an object can be decoded to Meta", hcursor.history))
94+
Left(DecodingFailure("only an object can be decoded to Meta", hcursor.history))
9695
}
9796
})
9897

9998
implicit val errorSourceDecoder = Decoder.instance[ErrorSource](hcursor {
10099
for {
101-
pointer hcursor.downField(FieldNames.`pointer`).as[Option[String]]
102-
parameter hcursor.downField(FieldNames.`parameter`).as[Option[String]]
100+
pointer hcursor.downField(FieldNames.`pointer`).as[Option[String]].right
101+
parameter hcursor.downField(FieldNames.`parameter`).as[Option[String]].right
103102
} yield
104103
ErrorSource(
105104
pointer = pointer,
@@ -109,14 +108,14 @@ trait CirceJsonapiDecoders {
109108

110109
implicit val errorDecoder = Decoder.instance[Error](hcursor {
111110
for {
112-
id hcursor.downField(FieldNames.`id`).as[Option[String]]
113-
status hcursor.downField(FieldNames.`status`).as[Option[String]]
114-
code hcursor.downField(FieldNames.`code`).as[Option[String]]
115-
title hcursor.downField(FieldNames.`title`).as[Option[String]]
116-
detail hcursor.downField(FieldNames.`detail`).as[Option[String]]
117-
links hcursor.downField(FieldNames.`links`).as[Option[Links]]
118-
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]]
119-
source hcursor.downField(FieldNames.`source`).as[Option[ErrorSource]]
111+
id hcursor.downField(FieldNames.`id`).as[Option[String]].right
112+
status hcursor.downField(FieldNames.`status`).as[Option[String]].right
113+
code hcursor.downField(FieldNames.`code`).as[Option[String]].right
114+
title hcursor.downField(FieldNames.`title`).as[Option[String]].right
115+
detail hcursor.downField(FieldNames.`detail`).as[Option[String]].right
116+
links hcursor.downField(FieldNames.`links`).as[Option[Links]].right
117+
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]].right
118+
source hcursor.downField(FieldNames.`source`).as[Option[ErrorSource]].right
120119
} yield
121120
Error(
122121
id = id,
@@ -132,12 +131,12 @@ trait CirceJsonapiDecoders {
132131

133132
implicit val resourceObjectDecoder = Decoder.instance[ResourceObject](hcursor {
134133
for {
135-
id hcursor.downField(FieldNames.`id`).as[Option[String]]
136-
`type` hcursor.downField(FieldNames.`type`).as[String]
137-
attributes hcursor.downField(FieldNames.`attributes`).as[Option[Attributes]]
138-
relationships hcursor.downField(FieldNames.`relationships`).as[Option[Relationships]]
139-
links hcursor.downField(FieldNames.`links`).as[Option[Links]]
140-
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]]
134+
id hcursor.downField(FieldNames.`id`).as[Option[String]].right
135+
`type` hcursor.downField(FieldNames.`type`).as[String].right
136+
attributes hcursor.downField(FieldNames.`attributes`).as[Option[Attributes]].right
137+
relationships hcursor.downField(FieldNames.`relationships`).as[Option[Relationships]].right
138+
links hcursor.downField(FieldNames.`links`).as[Option[Links]].right
139+
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]].right
141140
} yield
142141
ResourceObject(
143142
id = id,
@@ -150,20 +149,20 @@ trait CirceJsonapiDecoders {
150149
})
151150

152151
implicit val resourceObjectsDecoder =
153-
Decoder.instance[ResourceObjects](_.as[List[ResourceObject]].map(ResourceObjects))
152+
Decoder.instance[ResourceObjects](_.as[List[ResourceObject]].right.map(ResourceObjects))
154153

155-
implicit val dataDecoder = Decoder.instance[Data](_.as[Json].flatMap(jsonToData))
154+
implicit val dataDecoder = Decoder.instance[Data](_.as[Json].right.flatMap(jsonToData))
156155

157-
implicit val includedDecoder = Decoder.instance[Included](_.as[ResourceObjects].map(Included.apply))
156+
implicit val includedDecoder = Decoder.instance[Included](_.as[ResourceObjects].right.map(Included.apply))
158157

159158
implicit val rootObjectDecoder = Decoder.instance[RootObject](hcursor {
160159
for {
161-
data hcursor.downField(FieldNames.`data`).as[Option[Data]]
162-
links hcursor.downField(FieldNames.`links`).as[Option[Links]]
163-
errors hcursor.downField(FieldNames.`errors`).as[Option[Errors]]
164-
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]]
165-
included hcursor.downField(FieldNames.`included`).as[Option[Included]]
166-
jsonapi hcursor.downField(FieldNames.`jsonapi`).as[Option[JsonApi]]
160+
data hcursor.downField(FieldNames.`data`).as[Option[Data]].right
161+
links hcursor.downField(FieldNames.`links`).as[Option[Links]].right
162+
errors hcursor.downField(FieldNames.`errors`).as[Option[Errors]].right
163+
meta hcursor.downField(FieldNames.`meta`).as[Option[Meta]].right
164+
included hcursor.downField(FieldNames.`included`).as[Option[Included]].right
165+
jsonapi hcursor.downField(FieldNames.`jsonapi`).as[Option[JsonApi]].right
167166
} yield
168167
RootObject(
169168
data = data,

src/main/scala/org/zalando/jsonapi/json/circe/CirceJsonapiSupport.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ trait CirceJsonapiSupport extends CirceJsonapiEncoders with CirceJsonapiDecoders
1818
implicit val circeJsonapiUnmarshaller = Unmarshaller.delegate[String, RootObject](
1919
`application/vnd.api+json`,
2020
`application/json`
21-
)(decode[RootObject](_).toOption.get)
21+
)(decode[RootObject](_).right.get)
2222
}
2323

2424
object CirceJsonapiSupport extends CirceJsonapiSupport

src/test/scala/org/zalando/jsonapi/json/circe/CirceJsonapiFormatSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import org.zalando.jsonapi.model._
99

1010
class CirceJsonapiFormatSpec extends JsonBaseSpec[Json] with MustMatchers with CirceJsonapiEncoders with CirceJsonapiDecoders {
1111

12-
override protected def parseJson(jsonString: String): Json = parse(jsonString).toOption.get
13-
protected def decodeJson[T](json: Json)(implicit d: io.circe.Decoder[T]): T = json.as[T].toOption.get
12+
override protected def parseJson(jsonString: String): Json = parse(jsonString).right.get
13+
protected def decodeJson[T](json: Json)(implicit d: io.circe.Decoder[T]): T = json.as[T].right.get
1414

1515
"CirceJsonapiFormat" when {
1616
"serializing Jsonapi" must {

version.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "0.5.4"
1+
version in ThisBuild := "0.6.0"

0 commit comments

Comments
 (0)