Advertisement
Guest User

Untitled

a guest
May 25th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. import play.api.libs.json.{Json, JsValue}
  2.  
  3. import scala.collection.mutable
  4.  
  5. trait Writeable {
  6.  
  7. }
  8.  
  9. case class WriteableInt(v: Int) extends Writeable
  10. case class WriteableLong(v: Long) extends Writeable
  11. case class WriteableString(v: String) extends Writeable
  12. case class WriteableJson(v: JsValue)
  13.  
  14. object WriteableJson {
  15. implicit def jsonToWriteable(jsValue: WriteableJson): Writeable = new WriteableString(jsValue.toString())
  16. }
  17.  
  18. object Writeable {
  19. implicit val w: Writer[Writeable] = new Writer[Writeable]()
  20.  
  21. implicit def intToWriteable(i: Int): Writeable = new WriteableInt(i)
  22. implicit def longToWriteable(i: Long): Writeable = new WriteableLong(i)
  23. implicit def stringToWriteable(i: String): Writeable = new WriteableString(i)
  24. }
  25.  
  26. class Writer[T] {
  27. def write(v: T) = println(v.toString)
  28. }
  29.  
  30. class TestBindable {
  31. val params = mutable.Map[String,Writeable]()
  32.  
  33. def bind(p: Map[String,Writeable]) = params ++= p
  34.  
  35. def proceed() = {
  36. for {
  37. (k,v) <- params
  38. }{
  39. write(v)
  40. }
  41. }
  42.  
  43. def write[T](v: T)(implicit writer: Writer[T]) = writer.write(v)
  44. }
  45.  
  46. val t = new TestBindable
  47.  
  48. t.bind(Map("int" -> 1, "long" -> 1l, "string" -> "foo", "json" -> new WriteableJson(Json.obj("foo" -> "bar"))))
  49.  
  50. t.proceed()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement