module Text.XML.HXT.Arrow.Binary
( readBinaryValue
, writeBinaryValue
)
where
import Control.Arrow ()
import Control.Arrow.ArrowExc
import Control.Arrow.ArrowList
import Control.Arrow.ArrowIO
import Control.DeepSeq
import Data.Binary
import qualified Data.ByteString.Lazy as B
import Text.XML.HXT.Arrow.XmlState.ErrorHandling
import Text.XML.HXT.Arrow.XmlState.TypeDefs
readBinaryValue :: (NFData a, Binary a) => String -> IOStateArrow s b a
readBinaryValue file = flip decodeBinaryValue file $< getSysVar theBinaryDeCompression
decodeBinaryValue :: (NFData a, Binary a) => DeCompressionFct -> String -> IOStateArrow s b a
decodeBinaryValue decompress file
= arrIO0 ( do
r <- dec
rnf r `seq` return r
)
`catchA`
issueExc "readBinaryValue"
where
dec = B.readFile file >>= return . decode . decompress
writeBinaryValue :: (Binary a) => String -> IOStateArrow s a ()
writeBinaryValue file = flip encodeBinaryValue file $< getSysVar theBinaryCompression
encodeBinaryValue :: (Binary a) => CompressionFct -> String -> IOStateArrow s a ()
encodeBinaryValue compress file
= arrIO enc
`catchA`
issueExc "writeBinaryXmlTree"
where
enc = B.writeFile file . compress . encode