aboutsummaryrefslogtreecommitdiff
path: root/shared/Message.scala
diff options
context:
space:
mode:
authorJakob Odersky <jakob@inpher.io>2019-10-09 17:10:43 -0400
committerJakob Odersky <jakob@inpher.io>2019-10-09 20:33:16 -0400
commit0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7 (patch)
tree2df0258f81050e6fed51d38e217c4f6256518e12 /shared/Message.scala
parentfaed28c54900fc0b359700873367095f51425794 (diff)
downloadscala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.gz
scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.bz2
scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.zip
Migrate build to mill
Diffstat (limited to 'shared/Message.scala')
-rw-r--r--shared/Message.scala42
1 files changed, 42 insertions, 0 deletions
diff --git a/shared/Message.scala b/shared/Message.scala
new file mode 100644
index 0000000..84c733e
--- /dev/null
+++ b/shared/Message.scala
@@ -0,0 +1,42 @@
+package triad
+
+import java.security.MessageDigest
+import java.time.Instant
+
+case class Message(content: String,
+ author: String,
+ timestamp: Instant = Instant.now()) {
+
+ lazy val id: String = {
+ val digest = MessageDigest.getInstance("SHA-256")
+ digest.update(content.getBytes)
+ digest.update(author.getBytes)
+ digest.update((timestamp.getEpochSecond & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 8) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 16) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 24) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 32) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 40) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 48) & 0xff).toByte)
+ digest.update(((timestamp.getEpochSecond >> 56) & 0xff).toByte)
+ Message.bytesToHex(digest.digest())
+ }
+
+ def hashTags: Seq[String] =
+ content.split("\\s").filter(_.startsWith("#")).map(_.drop(1))
+
+}
+
+object Message {
+ private def bytesToHex(hash: Array[Byte]): String = {
+ val hexString = new StringBuffer(hash.length * 2)
+ var i = 0
+ while (i < hash.length) {
+ val hex = Integer.toHexString(0xff & hash(i))
+ if (hex.length == 1) hexString.append('0')
+ hexString.append(hex)
+ i += 1
+ }
+ hexString.toString
+ }
+}