blob: 035310b8aa74b081e865cb3e4713f2fc3fb6819c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package xyz.driver.pdsuidomain.formats.json
import spray.json._
import xyz.driver.entities.labels.{Label, LabelValue}
import xyz.driver.formats.json.labels._
import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities._
object patientcriterion {
import DefaultJsonProtocol._
import common._
def applyUpdateToPatientCriterion(json: JsValue, orig: PatientCriterion): PatientCriterion = json match {
case JsObject(fields) =>
val eligibilityStatus = fields
.get("eligibilityStatus")
.map(_.convertTo[LabelValue])
.getOrElse(orig.eligibilityStatus)
val verifiedEligibilityStatus = fields
.get("verifiedEligibilityStatus")
.map(_.convertTo[LabelValue])
.getOrElse(orig.verifiedEligibilityStatus)
orig.copy(
eligibilityStatus = eligibilityStatus,
verifiedEligibilityStatus = verifiedEligibilityStatus
)
case _ => deserializationError(s"Expected Json Object as partial PatientCriterion, but got $json")
}
implicit val draftPatientCriterionFormat: RootJsonFormat[DraftPatientCriterion] = jsonFormat3(
DraftPatientCriterion.apply)
implicit val draftPatientCriterionListReader = new JsonReader[List[DraftPatientCriterion]] {
override def read(json: JsValue) = json.convertTo[List[JsValue]].map(_.convertTo[DraftPatientCriterion])
}
implicit val patientCriterionFormat: RootJsonFormat[PatientCriterion] = jsonFormat14(PatientCriterion.apply)
implicit val patientCriterionArmFormat: RootJsonFormat[PatientCriterionArm] = jsonFormat3(PatientCriterionArm.apply)
implicit val richPatientCriterionFormat: RootJsonFormat[RichPatientCriterion] =
new RootJsonFormat[RichPatientCriterion] {
override def read(json: JsValue): RichPatientCriterion = {
val fields = json.asJsObject.fields
val labelId = fields.getOrElse("labelId", deserializationError("field 'labelId' is missing"))
val arms = fields.getOrElse("armList", deserializationError("field 'arms' is missing"))
RichPatientCriterion(
json.convertTo[PatientCriterion],
labelId.convertTo[LongId[Label]],
arms.convertTo[List[PatientCriterionArm]]
)
}
override def write(obj: RichPatientCriterion): JsValue = {
JsObject(
obj.patientCriterion.toJson.asJsObject.fields ++
Map(
"labelId" -> obj.labelId.toJson,
"armList" -> obj.armList.toJson
)
)
}
}
}
|