Measure.scala 877 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package models
  2. sealed trait Measure {
  3. def productPrefix: String
  4. def name: String = this.productPrefix.split("\\.").last
  5. // def primaryUnit: Uni
  6. }
  7. object Measure {
  8. import play.api.libs.json._
  9. implicit val measureFormat = new Format[Measure] {
  10. def writes(m: Measure): JsValue = Json.toJson(m.name.toLowerCase)
  11. def reads(jsValue: JsValue): JsResult[Measure] =
  12. jsValue.validate[String] match {
  13. case s: JsSuccess[String] => s.get match {
  14. case "mass" => JsSuccess(Mass)
  15. case "volume" => JsSuccess(Volume)
  16. case "number" => JsSuccess(Number)
  17. }
  18. case e: JsError => e
  19. }
  20. }
  21. }
  22. case object Mass extends Measure
  23. // {
  24. // val primaryUnit = Gram
  25. // }
  26. case object Volume extends Measure
  27. // {
  28. // val primaryUnit = Liter
  29. // }
  30. case object Number extends Measure
  31. // {
  32. // val primaryUnit = Count
  33. // }