packages feed

bolt-0.3.2.0: lib/Database/Bolt/Transport/Message.hs

{-# LANGUAGE OverloadedStrings #-}

module Database.Bolt.Transport.Message (
  sendmsg,
  recvmsg,
) where

import Data.Monoid
import Data.PackStream
import Data.Text qualified as T

import Database.Bolt.Exception
import Database.Bolt.Transport (Transport)
import Database.Bolt.Transport.Chunked qualified as Chunked

-------- Message I/O --------

sendmsg :: (Transport t, ToPackStream a) => t -> a -> IO ()
sendmsg conn = Chunked.put conn . pack

recvmsg :: (Transport t, FromPackStream a) => t -> IO a
recvmsg conn = do
  ma <- Chunked.get conn unpack
  case ma of
    Left e -> transportErr $ "Couldn't unpack received data: " <> T.pack e
    Right a -> return a