diff options
author | Jakob Odersky <jakob@inpher.io> | 2019-11-25 19:41:31 -0500 |
---|---|---|
committer | Jakob Odersky <jakob@inpher.io> | 2019-11-26 13:40:36 -0500 |
commit | 614cfa4da4db82d1eba5efe2eb982814dacd90f5 (patch) | |
tree | 0ebe4e00e37b543abb32d0e3d7bd87e165ea0a4c | |
parent | 23350eb38acc57200f961d46142254691441b5fa (diff) | |
download | scala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.tar.gz scala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.tar.bz2 scala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.zip |
Add message model
-rw-r--r-- | data.json | 7 | ||||
-rw-r--r-- | server/src/Main.scala | 17 | ||||
-rw-r--r-- | server/src/Message.scala | 26 |
3 files changed, 41 insertions, 9 deletions
diff --git a/data.json b/data.json new file mode 100644 index 0000000..5654e35 --- /dev/null +++ b/data.json @@ -0,0 +1,7 @@ +{ + "message": { + "author": "John Smith", + "date": 0, + "content": "hello!" + } +} diff --git a/server/src/Main.scala b/server/src/Main.scala index c76304a..47afea4 100644 --- a/server/src/Main.scala +++ b/server/src/Main.scala @@ -1,17 +1,16 @@ -package chat - +import scala.collection.mutable object Main extends cask.MainRoutes { - var data: String = "" + val messages = mutable.ListBuffer.empty[Message] + + messages += Message("John Smith", 0, "Hello, world!") @cask.get("/") - def get() = { - data - } + def get() = upickle.default.write(messages, indent = 2) // indent = 2 to pretty-print - @cask.post("/") - def post(request: cask.Request) = { - data = new String(request.readAllBytes()) + @cask.postJson("/") + def post(message: Message) = { + messages += message } initialize() diff --git a/server/src/Message.scala b/server/src/Message.scala new file mode 100644 index 0000000..55b4602 --- /dev/null +++ b/server/src/Message.scala @@ -0,0 +1,26 @@ +import java.time.Instant + +case class Message( + author: String, + date: Long, // seconds since epoch + content: String +) + +object Message { + + // A ReadWriter is used to serialize a message to JSON. + // The call to macroRW will generate a readwriter through compiler-time + // introspection. By default, the mapping of a case class to JSON is pretty + // straightforward. A message: + // Message("John Smith", 0, "Hello, World!") + // will get rendered as + // { + // "author": "John Smith", + // "date": 0, + // "message": "Hello, World!" + // } + // + implicit def messageRW: upickle.default.ReadWriter[Message] = + upickle.default.macroRW[Message] + +} |