X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2FFuncTorrent%2FBencode.hs;h=2b641a7f4b51f57b8ef4f831c6156a20f79c054c;hb=677f43e145aa2bb62f580be8b2fd72eccf212c1f;hp=bbeca650a6eca2c8a9b78050f5671ec36de418a9;hpb=fb7d9036a09f5df53f5d73d8e73b7cd169b112a6;p=functorrent.git diff --git a/src/FuncTorrent/Bencode.hs b/src/FuncTorrent/Bencode.hs index bbeca65..2b641a7 100644 --- a/src/FuncTorrent/Bencode.hs +++ b/src/FuncTorrent/Bencode.hs @@ -1,14 +1,13 @@ {-# LANGUAGE OverloadedStrings #-} -module FuncTorrent.Bencode ( - BVal(..) - , InfoDict - , bstrToString - , bValToInteger - , bValToInfoDict +module FuncTorrent.Bencode + (BVal(..) , bValToBList , bValToBstr - , encode + , bValToInfoDict + , bValToInteger + , bstrToString , decode + , encode ) where import Prelude hiding (length, concat) @@ -24,7 +23,7 @@ import qualified Text.Parsec.ByteString as ParsecBS data BVal = Bint Integer | Bstr ByteString | Blist [BVal] - | Bdict InfoDict + | Bdict (Map String BVal) deriving (Ord, Eq, Show) -- getters @@ -40,15 +39,13 @@ bValToBList :: BVal -> Maybe [BVal] bValToBList (Blist lst) = Just lst bValToBList _ = Nothing -bValToInfoDict :: BVal -> Maybe InfoDict +bValToInfoDict :: BVal -> Maybe (Map String BVal) bValToInfoDict (Bdict dict) = Just dict bValToInfoDict _ = Nothing bstrToString :: BVal -> Maybe String bstrToString bval = unpack <$> bValToBstr bval -type InfoDict = Map String BVal - -- $setup -- >>> import Data.Either @@ -122,7 +119,7 @@ bencList = do _ <- spaces -- Right (fromList [("spam",Blist [Bstr "a",Bstr "b"])]) -- >>> parse bencDict "Bdict" (pack "d9:publisher3:bob17:publisher-webpage15:www.example.com18:publisher.location4:homee") -- Right (fromList [("publisher",Bstr "bob"),("publisher-webpage",Bstr "www.example.com"),("publisher.location",Bstr "home")]) -bencDict :: ParsecBS.Parser InfoDict +bencDict :: ParsecBS.Parser (Map String BVal) bencDict = between (char 'd') (char 'e') $ fromList <$> many kvpair where kvpair = do k <- bencStr v <- bencVal