]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/FuncTorrent/Bencode.hs
Follow up #21. Applying fmap (alternative) on getters
[functorrent.git] / src / FuncTorrent / Bencode.hs
index 96600e2aa620e16c32de126e530ec9cabc846f1f..bbeca650a6eca2c8a9b78050f5671ec36de418a9 100644 (file)
@@ -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