module Data.PropertyList.Binary
( BPListHeader(..), BPListTrailer(..)
, BPListRecord(..), BPListRecords(..)
, readBPListRecords, putBPList
, Abs, Rel
, linearize, delinearize, absolutize, intern
, UnparsedBPListRecord(..)
, readBinaryPartialPropertyList
, readBinaryPartialPropertyListFromFile
, readBinaryPropertyList
, readBinaryPropertyListFromFile
, encodeBinaryPropertyList
, writeBinaryPropertyListToFile
) where
import Control.Applicative
import Data.Serialize.Put
import qualified Data.ByteString.Lazy as BL
import Data.PropertyList.Types
import Data.PropertyList.Binary.Algebra ()
import Data.PropertyList.Binary.Linearize
import Data.PropertyList.Binary.Get
import Data.PropertyList.Binary.Put
import Data.PropertyList.Binary.Types
readBinaryPartialPropertyList :: BL.ByteString -> Either String (PartialPropertyList UnparsedBPListRecord)
readBinaryPartialPropertyList bs = do
delinearize <$> readBPListRecords bs
readBinaryPropertyList :: BL.ByteString -> Either String PropertyList
readBinaryPropertyList bs = do
readBinaryPartialPropertyList bs >>= completePropertyListByM barf
where barf unparsed = Left ("Unparseable item found: " ++ show unparsed) :: Either String PropertyList
readBinaryPropertyListFromFile :: FilePath -> IO PropertyList
readBinaryPropertyListFromFile path = do
contents <- BL.readFile path
either fail return (readBinaryPropertyList contents)
readBinaryPartialPropertyListFromFile :: FilePath -> IO (PartialPropertyList UnparsedBPListRecord)
readBinaryPartialPropertyListFromFile file = do
bs <- BL.readFile file
either fail return (readBinaryPartialPropertyList bs)
encodeBinaryPropertyList :: PropertyList -> BL.ByteString
encodeBinaryPropertyList = runPutLazy . putBPList . linearize
writeBinaryPropertyListToFile :: FilePath -> PropertyList -> IO ()
writeBinaryPropertyListToFile path =
BL.writeFile path . encodeBinaryPropertyList