diff options
-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] + +} |