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
|