diff --git a/src/ATrade/Utils/MessagePipe.hs b/src/ATrade/Utils/MessagePipe.hs new file mode 100644 index 0000000..ce7f3ab --- /dev/null +++ b/src/ATrade/Utils/MessagePipe.hs @@ -0,0 +1,24 @@ +module ATrade.Utils.MessagePipe + ( + MessagePipe + , push + , getMessages + , emptyMessagePipe + ) where + +import qualified Data.ByteString as B +import qualified Data.List as L + +newtype MessagePipe = MessagePipe B.ByteString + +emptyMessagePipe = MessagePipe B.empty + +push :: B.ByteString -> MessagePipe -> MessagePipe +push chunk (MessagePipe content) = MessagePipe $ B.append content chunk + +getMessages :: MessagePipe -> (MessagePipe, [B.ByteString]) +getMessages (MessagePipe content) = + case B.split 0 content of + [] -> (MessagePipe B.empty, []) + [x] -> (MessagePipe x, []) + chunks -> (MessagePipe (L.last chunks), L.init chunks)