X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2FFuncTorrent%2FBencode.hs;fp=src%2FFuncTorrent%2FBencode.hs;h=bbeca650a6eca2c8a9b78050f5671ec36de418a9;hb=98dc02f2be38e699869be5266eeb6b241f4b3686;hp=96600e2aa620e16c32de126e530ec9cabc846f1f;hpb=2335cdc8f90f9ea85658bc10eb817071ab96bb7c;p=functorrent.git diff --git a/src/FuncTorrent/Bencode.hs b/src/FuncTorrent/Bencode.hs index 96600e2..bbeca65 100644 --- a/src/FuncTorrent/Bencode.hs +++ b/src/FuncTorrent/Bencode.hs @@ -1,10 +1,14 @@ {-# LANGUAGE OverloadedStrings #-} -module FuncTorrent.Bencode - (BVal(..), - InfoDict, - bstrToString, - encode, - decode +module FuncTorrent.Bencode ( + BVal(..) + , InfoDict + , bstrToString + , bValToInteger + , bValToInfoDict + , bValToBList + , bValToBstr + , encode + , decode ) where import Prelude hiding (length, concat) @@ -23,6 +27,26 @@ data BVal = Bint Integer | Bdict InfoDict deriving (Ord, Eq, Show) +-- getters +bValToInteger :: BVal -> Maybe Integer +bValToInteger (Bint x) = Just x +bValToInteger _ = Nothing + +bValToBstr :: BVal -> Maybe ByteString +bValToBstr (Bstr bs) = Just bs +bValToBstr _ = Nothing + +bValToBList :: BVal -> Maybe [BVal] +bValToBList (Blist lst) = Just lst +bValToBList _ = Nothing + +bValToInfoDict :: BVal -> Maybe InfoDict +bValToInfoDict (Bdict dict) = Just dict +bValToInfoDict _ = Nothing + +bstrToString :: BVal -> Maybe String +bstrToString bval = unpack <$> bValToBstr bval + type InfoDict = Map String BVal -- $setup @@ -140,8 +164,3 @@ encode (Bstr bs) = pack $ show (length bs) ++ ":" ++ unpack bs encode (Bint i) = pack $ "i" ++ show i ++ "e" encode (Blist xs) = pack $ "l" ++ unpack (concat $ map encode xs) ++ "e" encode (Bdict d) = concat [concat ["d", encode . Bstr . pack $ k , encode (d ! k) , "e"] | k <- keys d] - --- getters -bstrToString :: BVal -> Maybe String -bstrToString (Bstr s) = Just $ unpack s -bstrToString _ = Nothing