package models sealed trait Measure { def productPrefix: String def name: String = this.productPrefix.split("\\.").last // def primaryUnit: Uni } object Measure { import play.api.libs.json._ implicit val measureFormat = new Format[Measure] { def writes(m: Measure): JsValue = Json.toJson(m.name.toLowerCase) def reads(jsValue: JsValue): JsResult[Measure] = jsValue.validate[String] match { case s: JsSuccess[String] => s.get match { case "mass" => JsSuccess(Mass) case "volume" => JsSuccess(Volume) case "number" => JsSuccess(Number) } case e: JsError => e } } } case object Mass extends Measure // { // val primaryUnit = Gram // } case object Volume extends Measure // { // val primaryUnit = Liter // } case object Number extends Measure // { // val primaryUnit = Count // }