1 changed files with 24 additions and 0 deletions
@ -0,0 +1,24 @@
@@ -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) |
||||
Loading…
Reference in new issue