module Data.BERT.Packet
( Packet(..)
, fromPacket
) where
import Control.Monad
import Data.ByteString.Lazy as L
import Data.Binary
import Data.Binary.Put
import Data.Binary.Get
import Data.BERT.Term ()
import Data.BERT.Types
data Packet
= Packet Term
deriving (Show, Ord, Eq)
fromPacket (Packet t) = t
instance Binary Packet where
put (Packet term) =
putWord32be (fromIntegral len) >> putLazyByteString encoded
where encoded = encode term
len = L.length encoded
get = getPacket
getPacket =
liftM fromIntegral getWord32be >>=
getLazyByteString >>=
return . Packet . decode