aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@inpher.io>2019-11-25 19:41:31 -0500
committerJakob Odersky <jakob@inpher.io>2019-11-26 13:40:36 -0500
commit614cfa4da4db82d1eba5efe2eb982814dacd90f5 (patch)
tree0ebe4e00e37b543abb32d0e3d7bd87e165ea0a4c
parent23350eb38acc57200f961d46142254691441b5fa (diff)
downloadscala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.tar.gz
scala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.tar.bz2
scala-tutorial-614cfa4da4db82d1eba5efe2eb982814dacd90f5.zip
Add message model
-rw-r--r--data.json7
-rw-r--r--server/src/Main.scala17
-rw-r--r--server/src/Message.scala26
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]
+
+}