From 86fa7d53c145cae100ada8a6a3b0fbc9de5e970f Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Mon, 20 Jan 2025 20:21:10 +0700 Subject: [PATCH] Add missing file --- src/ATrade/Utils/MessagePipe.hs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/ATrade/Utils/MessagePipe.hs 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)