1 changed files with 24 additions and 0 deletions
@ -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