summaryrefslogtreecommitdiff
path: root/hsm-core/Hsm/Core/Message.hs
blob: 2fb5d3c4c2e8dbad78b4f1c06dc222e778deb476 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}

module Hsm.Core.Message
  ( message
  , topic
  , body
  )
where

import Data.Binary (Binary, decode, encode)
import Data.ByteString (ByteString, fromStrict, toStrict)
import Data.ByteString.Char8 qualified as B (breakSubstring, drop, length)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8, encodeUtf8)

sep :: ByteString
sep = "//"

message :: Binary a => Text -> a -> ByteString
message t b = encodeUtf8 t <> sep <> toStrict (encode b)

topic :: ByteString -> Text
topic = decodeUtf8 . fst . B.breakSubstring sep

body :: Binary a => ByteString -> a
body = decode . fromStrict . B.drop (B.length sep) . snd . B.breakSubstring sep