Skip to content

Instantly share code, notes, and snippets.

@debasishg
Created May 16, 2011 18:02
Show Gist options
  • Save debasishg/974974 to your computer and use it in GitHub Desktop.
Save debasishg/974974 to your computer and use it in GitHub Desktop.
// classes and typeclass instances
case class WFNode(val id: Long, val name: String, val requestedBy: Option[String] = None)
implicit val WFNodeFormat: Format[WFNode] =
asProduct3("id", "name", "requestedBy")(WFNode)(WFNode.unapply(_).get)
case class ValueNode(override val id: Long, override val name: String,
override val requestedBy: Option[String] = None,
var value: Option[String] = None) extends WFNode(id, name, requestedBy)
implicit val ValueNodeFormat: Format[ValueNode] =
asProduct4("id", "name", "requestedBy", "value")(ValueNode)(ValueNode.unapply(_).get)
case class ParameterNode(override val id: Long, override val name: String,
override val requestedBy: Option[String] = None,
initialValue: Option[String] = None) extends ValueNode(id, name, requestedBy, initialValue)
implicit val ParameterNodeFormat: Format[ParameterNode] =
asProduct4("id", "name", "requestedBy", "initialValue")(ParameterNode)(ParameterNode.unapply(_).get)
case class FileNode(override val id: Long, override val name: String, val fileType: String,
override val requestedBy : Option[String] = None,
initialGUID: Option[String] = None) extends ValueNode(id, name, requestedBy, initialGUID)
implicit val FileNodeFormat: Format[FileNode] =
asProduct5("id", "name", "requestedBy", "fileType", "initialGUID")(FileNode)(FileNode.unapply(_).get)
case class AnalysisNode(id: Long, name: String, val application: String, val version: String, val analysis: String)
implicit val AnalysisNodeFormat: Format[AnalysisNode] =
asProduct5("id", "name", "application", "version", "analysis")(AnalysisNode)(AnalysisNode.unapply(_).get)
// test cases
describe("Serialization with another inheritance") {
it("should serialize") {
val vn = ValueNode(100, "value_node_name", Some("debasish"), Some("value_node_value"))
val acc = fromjson[ValueNode](tojson(vn))
acc should equal(vn)
val fn = FileNode(100, "file_node_name", "file_node_file_type", Some("debasish"), Some("initial_guid"))
val fcc = fromjson[FileNode](tojson(fn))
fcc should equal(fn)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment